为什么会发生以下情况?
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
。两者似乎都非常“没有DST-ish”。
对解决方法感到兴奋。
更新
阅读了一些文档(http://docs.python.org/2/library/time.html#time.mktime)后,mktime()
输出“localtime”而非UTC,正如我所想的那样。这让一切都搞不清楚。
答案 0 :(得分:0)
.strftime('%s')
is not supported by Python。不要使用它。
在有效的系统上,它将日期时间对象解释为本地时区的时间,即datetime.now().strftime('%s')
可能会在time.time()
附近返回值。
要查找utc偏移量或DST是否在给定的当地时间生效,您可以致电d.utcoffset()
,d.dst()
其中d
是具有pytz时区的日期时间对象。
>>> import pytz
>>> d = datetime.now(pytz.utc)
>>> d.utcoffset()
datetime.timedelta(0)
>>> d.dst()
datetime.timedelta(0)
正如预期的那样,UTC时区的UTC偏移为零,并且没有DST转换,因此.dst()
全年始终为零。