我不想冒险为此提出攻击,因为它涉及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
有没有内置的方法呢?
答案 0 :(得分:2)
您需要将时间转换为unix时间戳并将时间戳舍入为希望。
round(Timestamp / 60 seconds [minutes conversion] / 10 [round precision]) * 60 * 10 [to get the timestamp back]
答案 1 :(得分: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 :(得分: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
答案 3 :(得分:0)
对时间戳进行舍入工作:
MINUTES = 10.
d = datetime.now()
t = time.mktime(d.timetuple())
t = math.ceil((t // 60) / MINUTES) * 600
d = datetime.fromtimestamp(t)
答案 4 :(得分:0)
dt += datetime.timedelta(minutes=9, seconds=59, microseconds=999999)
dt.replace(minutes=dt.minutes-(dt.minutes%10), seconds=0, microseconds=0)
第一部分增加了9分59.999999秒,因此结果总是向上舍入。秒部分减去多余的分钟以返回10分钟的边界并将秒设置为零。