pytz.astimezone不考虑夏令时?

dho*_*ius 16 python pytz dst

在2013年6月1日,我预计"PST8PDT"时区的行为与GMT + 7一样,因为它是该时区的夏令时.但是,它的行为类似于GMT + 8:

>>> import pytz, datetime
>>> Pacific = pytz.timezone("PST8PDT")
>>> datetime.datetime(2013, 6, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 20, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

相比之下,在2013年1月1日,它表现得(正确)像GMT + 8:

>>> datetime.datetime(2013, 1, 1, 12, tzinfo=Pacific).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?提前致谢!

Mar*_*som 25

您无法在datetime构造函数中分配时区,因为它不会为时区对象提供调整夏令时的机会 - 日期无法访问.这对世界某些地区造成了更多问题,这些地区多年来时区的名称和偏移都发生了变化.

pytz文档:

不幸的是,对于许多时区,使用标准日期时间构造函数的'tzinfo参数''与pytz不兼容.

请使用localize具有天真日期时间的方法.

>>> Pacific.localize(datetime.datetime(2013, 6, 1, 12)).astimezone(pytz.utc)
datetime.datetime(2013, 6, 1, 19, 0, tzinfo=<UTC>)
>>> Pacific.localize(datetime.datetime(2013, 1, 1, 12)).astimezone(pytz.utc)
datetime.datetime(2013, 1, 1, 20, 0, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)