12

在 Python 2.7.2 中,我得到了自纪元以来的秒数:

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)

我知道这样做的丑陋方式,但有没有优雅的方式?

4

3 回答 3

26

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

演示

于 2013-10-31T23:41:32.087 回答
10

当然,只需将其转换datetimedate第一个:

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

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

于 2013-10-31T23:31:47.050 回答
1

这是一种非常直观的方法,它可能看起来有点野蛮,但它可以在一条线上工作。

基本上,逻辑是获取您当前的日期,然后减去您拥有的所有小时、分钟、秒和微秒,然后加上一天(如果您想四舍五入,则保留它,否则如果您要向下舍入,则保留它。)

   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)
于 2019-07-29T06:05:43.550 回答