2014-09-04 34 views
3

我創建今天10:30在紐約日期:爲什麼python紐約時區顯示4:56而不是4:00?

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

此打印:

2014年9月4日10:30:02.294757-04:56

我想比較這與另一個紐約時間有4:00的時區偏移,所以比較不起作用。

如何使時區偏移4:00?

+1

在你的代碼是什麼'''timezone'''? – wwii 2014-09-04 14:52:27

回答

8

而應該做這樣的:

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

你的情況會發生什麼事是時區被盲目地附加到日期時間對象,不知道它的年份,月份等等。因爲日期是未知的,並且它是不實際的可以確定目前什麼時候是立法,如果夏令時有效,等等,假設你只需要紐約的地理時間,你就可以得到。

結果可能因不同年份而異。例如,夏令時在美國於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 
+1

這個時區的東西不適合心靈的暈! – Atma 2014-09-04 15:10:32

+0

@Atma是的,這是真的。我知道很多非常聰明,技能嫺熟的程序員,他們在Python的時區處理方面遇到麻煩。 – 2014-09-04 15:16:33

相關問題