给定区域的 pytz 中的 DST 偏移量错误

Posted

技术标签:

【中文标题】给定区域的 pytz 中的 DST 偏移量错误【英文标题】:Wrong DST offset in pytz for a given zone 【发布时间】:2019-05-23 23:02:22 【问题描述】:

墨西哥城的 DST(夏令时)于当地时间 2018 年 10 月 28 日凌晨 3:00 结束,那是时钟向后移动一小时重新开始于 2:00 的确切时刻。

创建以下感知日期时间时:

>>>mex = pytz.timezone('America/Mexico_City')
>>>mex_dt = mex.localize(datetime(2018,10,28,1,30))

我得到这个结果:

>>>print(mex_dt)
2018-10-28 01:30:00-06:00

虽然正确的结果应该是:

2018-10-28 01:30:00-05:00

因为创建的 01:30AM 时间仍然属于 DST,并且应该具有 -05:00 的偏移量。看起来 pytz 假设所有国家/地区的时钟都在 2:00 向后移动,但在墨西哥并非如此,这种情况发生在 3:00

有人知道我该如何纠正吗?建议?

【问题讨论】:

【参考方案1】:

我看到你问了同样的问题on the IANA time zone mailing list。

作为 Paul Eggert replied there,您的信息似乎不正确。墨西哥的official time policy 确实将过渡时间设置为2:00。如果您有相反的信息,请分享您的来源。

您还可以查看此更改visualized here,或阅读有关time in Mexico on Wikipedia 的信息。

【讨论】:

以上是关于给定区域的 pytz 中的 DST 偏移量错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pytz 在跨越 TZ 和 DST 边界而不是 TZ 名称时正确调整时间和偏移量?

给定 UTC 时间戳和 UTC 偏移量,是不是可以在 Python 中获取时区?

如何在 python 和 django 中使用 Pytz 根据给定的 UTC 偏移量转换数据和时间?

Python 中给定 TimeZone 的标准 UTC 偏移量(无 DST)

Pytz 在没有 DST 的情况下将时间转换为 UTC

检测 C++ 中的 DST 更改