1

为什么会出现以下情况?

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_isdst0-1。两者看起来都非常“没有夏令时”。

只是对解决方法不感兴趣。

更新:

在阅读了一些文档(http://docs.python.org/2/library/time.html#time.mktime)之后,它似乎 mktime()输出“本地时间”而不是我想象的 UTC。这混淆了一切。

4

1 回答 1

0

.strftime('%s')Python 不支持。不要使用它。

在它工作的系统上,它将 datetime 对象解释为本地时区中的时间,即,datetime.now().strftime('%s')可能返回值 near time.time()

要找出 utc 偏移量或 DST 是否对给定的本地时间有效,您可以调用d.utcoffset()d.dst()其中d是具有 pytz 时区的 datetime 对象。

>>> import pytz
>>> d = datetime.now(pytz.utc)
>>> d.utcoffset()
datetime.timedelta(0)
>>> d.dst()
datetime.timedelta(0)

正如预期的那样,UTC 时区的 UTC 偏移量为零,并且没有 DST 转换,因此.dst()全年始终为零。

于 2014-03-27T08:21:19.187 回答