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 不考虑夏令时?的主要内容,如果未能解决你的问题,请参考以下文章

从 R 中的 GMT 转换时考虑夏令时

Java 8 的 ZoneOffset 是不是考虑了夏令时?

UTC 是不是遵守夏令时?

Debian 在 R 中没有考虑夏令时

Spark:考虑夏令时将 GMT 时间戳转换为东部时间

如何从 Unix 纪元时间转换并在 Python 中考虑夏令时?