pytz.astimezone 不考虑夏令时?
Posted
技术标签:
【中文标题】pytz.astimezone 不考虑夏令时?【英文标题】:pytz.astimezone not accounting for daylight savings? 【发布时间】:2013-09-22 15:34:51 【问题描述】:在 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】:您不能在 datetime
构造函数中分配时区,因为它没有给时区对象一个调整夏令时的机会 - 它无法访问日期。这会给世界某些地区带来更多问题,这些地区的时区名称和偏移量多年来一直在变化。
来自pytz
documentation:
不幸的是,在许多时区使用标准日期时间构造函数的 tzinfo 参数“不起作用”。
改用带有简单日期时间的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>)
【讨论】:
以上是关于pytz.astimezone 不考虑夏令时?的主要内容,如果未能解决你的问题,请参考以下文章