pytz.astimezone不考虑夏令时?

时间:2013-09-18 01:54:53

标签: python dst pytz

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>)

相比之下,在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>)

我做错了什么?提前谢谢!

1 个答案:

答案 0 :(得分:23)

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

来自pytz documentation

  

不幸的是,对于许多时区,使用标准日期时间构造函数的'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>)