如何将(总是)时间向上舍入到最接近的十?

时间:2011-08-03 20:41:25

标签: python datetime date

我不想冒险为此提出攻击,因为它涉及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 个答案:

答案 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分钟的边界并将秒设置为零。