首页 > 解决方案 > 如何从 Python 中当前本地小时的底部获取纪元?

问题描述

我想根据当前本地时间的底部来获取纪元。

示例: 11:15:23 应产生 11:00:00 的相应纪元

这是我到目前为止所得到的。问题是 2 小时的结果存在时区差异。这里有什么问题,可以简化吗?

import time
import datetime

now = time.time()
print(str(int(now)))
localtime = time.localtime(now)
print(localtime)

epoch = (datetime.datetime(localtime.tm_year, localtime.tm_mon, 
                           localtime.tm_mday, 
                           localtime.tm_hour, 0, 0)
      - datetime.datetime(1970, 1, 1)).total_seconds()      

print(str(int(epoch)))
localtime = time.localtime(epoch)
print(localtime)

结果就在这里,并且有 2 小时 (tm_hour) 的偏移量不应该存在:

1558430139
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=21, tm_hour=11, tm_min=15, tm_sec=39, tm_wday=1, tm_yday=141, tm_isdst=1)
1558436400
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=21, tm_hour=13, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=141, tm_isdst=1)

请注意,我不想将纪元四舍五入到 3600 秒,因为我怀疑自 1970 年以来存在一些闰秒。但根据我的结果不确定。

标签: python

解决方案


在对纪元进行了更多研究后,我得出结论,闰秒并没有发挥规律。一个小时的开始始终是纪元中 ​​3600 秒的倍数。因此计算很简单:

now = time.time()
bottomOfHour = int( int(now) / 3600 ) * 3600

推荐阅读