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

时间:2013-10-31 23:28:58

标签: 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)

对应

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

3 个答案:

答案 0 :(得分:14)

您可以使用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

DEMO

答案 1 :(得分:4)

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

sec_since_epoch = (date_obj.date() - date(1970, 1, 1)).total_seconds()

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

答案 2 :(得分:0)

这是一种非常直观的方法,可能看起来有点野蛮,但可以一行完成。

基本上,逻辑是获取当前日期,然后减去所有小时数,分,秒和微秒,然后加上一天(即要舍入,否则舍入就舍入)

   from datetime import date,timedelta

    Rounded_date =  ( the_date - timedelta(hours=date.hour, minutes=date.minute,
    seconds=date.second, microseconds=date.microsecond) ) + timedelta(days=1)