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

Atm*_*tma 6 python django time timezone datetime

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

    ny_tz = timezone('America/New_York')
    ny_time = datetime(2014, 9, 4, 10, 30, 2, 294757, tzinfo=ny_tz)
Run Code Online (Sandbox Code Playgroud)

这打印:

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

我试图将此与另一个纽约时间进行比较,该时间偏移时间为4:00,因此比较不起作用.

如何使时区偏移4:00?

Vas*_*eev 11

你应该这样做:

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

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

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

相关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
Run Code Online (Sandbox Code Playgroud)

  • 这个时区的东西不适合胆小的人! (3认同)