【发布时间】:2016-07-12 20:28:13
【问题描述】:
我需要以可读格式存储时间戳,然后我需要将其转换为纪元以进行比较。
我试过这样做:
import time
format = '%Y %m %d %H:%M:%S +0000'
timestamp1 = time.strftime(format,time.gmtime()) # '2016 03 25 04:06:22 +0000'
t1 = time.strptime(timestamp1, format) # time.struct_time(..., tm_isdst=-1)
time.sleep(1)
epoch_now = time.mktime(time.gmtime())
epoch_t1 = time.mktime(t1)
print "Delta: %s" % (epoch_now - epoch_t1)
运行此程序,我得到的不是 1 秒的 Delta,而是 3601(1 小时 1 秒),始终如一。
进一步调查,似乎当我只执行 time.gmtime() 时,结构具有 tm_isdst=0,而从 timestamp1 字符串转换的结构 t1 具有 tm_isdst=-1。
如何确保 isdst 保留为 0。我认为这可能是这里的问题。
或者是否有更好的方法以人类可读格式 (UTC) 记录时间,但又能够正确转换回纪元以进行时间差异计算?
更新: 昨晚做了更多研究后,我转而使用 datetime,因为它在 datetime 对象中保留了更多信息,下面的 albertoql 回答证实了这一点。
这是我现在拥有的:
from datetime import datetime
format = '%Y-%m-%d %H:%M:%S.%f +0000' # +0000 is optional; only for user to see it's UTC
d1 = datetime.utcnow()
timestamp1 = d1.strftime(format)
d1a = datetime.strptime(timestamp1, format)
time.sleep(1)
d2 = datetime.utcnow()
print "Delta: %s" % (d2 - d1a).seconds
我选择不添加 tz 以使其简单/更短;我仍然可以那样进行strptime。
【问题讨论】:
标签: python time timezone utc dst