为什么Python纽约时区显示4:56而不是4:00?
我正在创建一个代表今天在纽约的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