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

时间:2014-09-04 14:43:23

标签: python django datetime time timezone

我今天在纽约创建了一个10:30的日期:

    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 个答案:

答案 0 :(得分:10)

你应该这样做:

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文档部分:http://pytz.sourceforge.net/#localized-times-and-date-arithmetic

在您的情况下会发生什么情况是时区被盲目地附加到日期时间对象,而不知道它的年,月等等。因为日期未知,并且无法确定当前立法的时间,应该DST生效等等,假设您只想要获得纽约的地理时间。

结果可能因年份而异。例如,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