我需要以可读格式存储一个时间戳,然后稍后我需要将其转换为epoch以进行比较。
我尝试过以下方式:
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
我选择不添加时区信息以使其更简单/更短; 我仍然可以使用strptime。