如何总是将时间 округ到最近的十分钟?
我不想冒险去找一个解决办法,因为这涉及到 datetime
对象。简单来说,我想要进行这样的转换:
2010-04-21 06:37:53 -> 2010-04-21 06:40:00
2010-08-26 02:54:00 -> 2010-08-26 03:00:00
2010-04-21 06:37:12 -> 2010-04-21 06:40:00
2010-08-26 11:54:19 -> 2010-08-27 00:00:00
有没有什么内置的方法可以做到这一点呢?
5 个回答
1
这对我来说似乎是有效的。
def round_up(tm):
upmins = math.ceil(float(tm.minute)/10)*10
diffmins = upmins - tm.minute
newtime = tm + datetime.timedelta(minutes=diffmins)
newtime = newtime.replace(second=0)
return newtime
转换:
2010-04-21 06:37:53 -> 2010-04-21 06:40:00
2010-08-26 02:54:00 -> 2010-08-26 03:00:00
2010-04-21 06:37:12 -> 2010-04-21 06:40:00
2010-08-26 02:54:19 -> 2010-08-26 03:00:00
2010-04-21 06:35:32 -> 2010-04-21 06:40:00
2
你想要只对分钟进行四舍五入。即使你忽略秒和微秒,结果也会是正确的。
在这种情况下,你可以用一行代码来解决:
def round_minutes(t): # t is a datetime object
return t - datetime.timedelta( minutes = t.minute - round(t.minute, -1), seconds = t.second, microseconds = t.microsecond)
你需要计算原始分钟和四舍五入到最近的10分钟之间的时间差,然后把这个差值应用上。同时,为了把秒和微秒归零,你也要把它们加到这个时间差里。
2
你需要把你的时间转换成一个叫做 Unix 时间戳的东西,然后根据需要对这个时间戳进行四舍五入。
round(时间戳 / 60秒 [转换成分钟] / 10 [四舍五入的精度]) * 60 * 10 [再把时间戳转换回来]