为什么Python纽约时区显示4:56而不是4:00?

20 投票
1 回答
3625 浏览
提问于 2025-04-19 20:10

我正在创建一个代表今天在纽约的10:30的时间:

from pytz import timezone
ny_tz = timezone('America/New_York')
ny_time = datetime(2014, 9, 4, 10, 30, 2, 294757, tzinfo=ny_tz)

这段代码输出:

2014-09-04 10:30:02.294757-04:56

我想把这个时间和另一个纽约的时间进行比较,但那个时间的时区偏移是4:00,所以比较不成功。

我该如何把时区偏移改成4:00呢?

1 个回答

30

你应该这样做:

ny_tz = timezone('America/New_York')
ny_time = ny_tz.localize(datetime(2014, 9, 4, 10, 30, 2, 294757))

这样可以得到正确的结果:

>>> print ny_tz.localize(datetime(2014, 9, 4, 10, 30, 2, 294757))
2014-09-04 10:30:02.294757-04:00

相关的 pytz 文档部分:https://pythonhosted.org/pytz/#localized-times-and-date-arithmetic

在你的情况中,时区被直接附加到日期时间对象上,但没有考虑到它的年份、月份等信息。因为日期不明确,所以无法判断当时的时间法规,比如夏令时是否生效等,因此系统假设你只是想要纽约的地理时间,这就是你得到的结果。

不同年份的结果可能会有所不同。例如,美国在1918年引入了夏令时,所以1917年和1918年同一天的结果就不一样:

>>> print ny_tz.localize(datetime(1917, 9, 4, 10, 30, 2, 294757))
1917-09-04 10:30:02.294757-05:00
>>> print ny_tz.localize(datetime(1918, 9, 4, 10, 30, 2, 294757))
1918-09-04 10:30:02.294757-04:00

撰写回答