在Python中将时间戳舍入到最近的一天

Lym*_*rga 6 python datetime

在Python 2.7.2中,我获得了epoch以来的秒数:

sec_since_epoch = (date_obj - datetime(1970, 1, 1, 0, 0)).total_seconds()

现在我想将这些秒数舍入到最近的一天,例如:

datetime.fromtimestamp(sec_since_epoch)

对应于 datetime(2013, 12, 14, 5, 0, 0)

我想要新的时间戳对应 datetime(2013, 12, 14, 0, 0, 0)

我知道这种丑陋的做法,但是有一种优雅的方式吗?

Eug*_*nov 15

您可以使用datetime.timetuple()日期来操纵.例如这样:

from datetime import datetime


dt = datetime(2013, 12, 14, 5, 0, 0)
dt = datetime(*dt.timetuple()[:3]) # 2013-12-14 00:00:00
print dt.strftime('%s') # 1386997200
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 这会截断时间而不是四舍五入 - 即晚上 11 点将四舍五入到当天的开始,而不是四舍五入到下一天 (2认同)

aba*_*ert 9

当然,只需先将其转换datetime为 a date

sec_since_epoch = (date_obj.date() - date(1970, 1, 1)).total_seconds()
Run Code Online (Sandbox Code Playgroud)

当然date()截断。如果您想在中午或中午之后进行四舍五入,只需在截断前添加 12 小时,或者检查日期是否在同一天 >= 中午,如果是,则添加一天(请注意,这些可以在DST 边界天数),或您想要舍入的任何规则。

  • @LymanZerga:时间戳是格林威治标准时间 2013 年 10 月 31 日午夜,显然是您当地时区的 2013 年 10 月 30 日 17:00,这就是您所看到的。阅读关于 naive datetime 对象的文档。 (2认同)