2014-12-03 68 views
3

我正在做一些日期時間的魔法,並試圖找出爲什麼時間稍微關閉。標準化日期時間對象

下午3點中心6月3日2014 UTC:

>>> chicago = pytz.timezone('US/Central') 
>>> chicago.localize(datetime(2014,6,3,15,0,0)).astimezone(pytz.utc) 
datetime.datetime(2014, 6, 3, 20, 0, tzinfo=<UTC>) 

下午3點中心12月2日2014 UTC:

>>> chicago.localize(datetime(2014,12,2,15,0,0)).astimezone(pytz.utc) 
datetime.datetime(2014, 12, 2, 21, 0, tzinfo=<UTC>) 

在第二個例子中的時間是21作爲反對20第一個例子。我想也許日期沒有正常化,所以我試過這個:

>>> chicago.normalize(chicago.localize(datetime(2014,12,2,15,0,0))).astimezone(pytz.utc) 
datetime.datetime(2014, 12, 2, 21, 0, tzinfo=<UTC>) 

它仍然是21.這是怎麼回事?

回答

1

夏令時。

在第一種情況(6月3日),芝加哥是下中部夏令時。 UTC的偏移量爲五個小時。

>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z' 
>>> clt=chicago.localize(datetime(2014,6,3,15,0,0)) 
>>> clt.strftime(fmt) 
'2014-06-03 15:00:00 CDT-0500' 
        ^^^^^^^^ 

在第二種情況下(12月2日),芝加哥在中央標準時間。 UTC的偏移量爲六個小時。

>>> clt=chicago.localize(datetime(2014,12,2,15,0,0)) 
>>> clt.strftime(fmt) 
'2014-12-02 15:00:00 CST-0600' 
        ^^^^^^^^ 

您對normalize()調用沒有幫助在這裏,因爲你不這樣做的日期或時間算術本地時間跨越DST邊界。