如何总是将时间 округ到最近的十分钟?

2 投票
5 回答
8901 浏览
提问于 2025-04-16 22:50

我不想冒险去找一个解决办法,因为这涉及到 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 [再把时间戳转换回来]

撰写回答