在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)
我知道做这件事的丑陋方式,但有一种优雅的方式吗?
答案 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
答案 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)