【问题标题】:pytz.astimezone not accounting for daylight savings?pytz.astimezone 不考虑夏令时?
【发布时间】: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>)

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

【问题讨论】:

    标签: python dst pytz


    【解决方案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>)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 2018-01-01
      • 2020-09-12
      • 2020-03-01
      • 2018-02-04
      • 2017-09-15
      • 2012-07-03
      • 1970-01-01
      相关资源
      最近更新 更多