【发布时间】:2013-10-30 08:29:22
【问题描述】:
为什么会发生以下情况?
from datetime import datetime
import pytz
d = pytz.utc.localize(datetime.utcnow())
print float(d.strftime('%s')) - float(d.replace(tzinfo=None).strftime('%s')) # 3600.0
为什么无论是否包含 tzinfo 都会延迟一小时?我假设它与 DST 有关,但是...... UTC 没有 DST。
d.timetuple()
# time.struct_time(tm_year=2013, tm_mon=10, tm_mday=21, tm_hour=17, tm_min=44, tm_sec=40, tm_wday=0, tm_yday=294, tm_isdst=0)
d.replace(tzinfo=None).timetuple()
# time.struct_time(tm_year=2013, tm_mon=10, tm_mday=21, tm_hour=17, tm_min=44, tm_sec=40, tm_wday=0, tm_yday=294, tm_isdst=-1)
所以,区别在于tm_isdst 是0 或-1。两者看起来都非常“没有夏令时”。
只是对解决方法不感兴趣。
更新:
在阅读了一些文档 (http://docs.python.org/2/library/time.html#time.mktime) 之后,mktime() 似乎输出“本地时间”而不是我想象的 UTC。这让一切都感到困惑。
【问题讨论】:
-
你的标题提到了“纪元时间”。这个答案显示how to convert datetime.date and datatime.datetime to POSIX timestamp
标签: python datetime utc epoch pytz