2010-08-23 54 views
1

時區之間進行切換時我有這樣創建的日期時間對象:不一致性在python

tm = datetime.datetime.strptime('2010 Aug 04 14:15:16', '%Y %b %d %H:%M:%S') 
>>> tm 
datetime.datetime(2010, 8, 4, 14, 15, 16) 

我然後這樣設置時區:

tm.replace(tzinfo=pytz.timezone('UTC')) 
>>> tm 
datetime.datetime(2010, 8, 4, 14, 15, 16, tzinfo=<UTC>) 

最後,我更改時區的美國/太平洋是這樣的:

>>> tm = tm.astimezone(pytz.timezone('US/Pacific')) 
>>> tm 
datetime.datetime(2010, 8, 4, 7, 15, 16, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>) 

這是正確的。但如果我去到另一個方向:

>>> tm = tm.replace(tzinfo =pytz.timezone('US/Pacific')) 
>>> tm 
datetime.datetime(2010, 8, 4, 14, 15, 16, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>) 

正如你可以看到,使用替代()與PST時區錯誤地認爲它不是夏令時。因此,當我轉換爲UTC時,它增加了8個小時而不是7個。

爲什麼它這樣做,我該如何改變它,使它符合我的要求(正確實現DST或不)。

+0

我也有Python的時區問題以及... – 2010-08-23 20:53:26

回答

2

是的,這就是爲什麼你使用.astimezone而不是.replace當你有datetime一個時區。使用.astimezone爲時區提供了調整夏令時等機會的機會。 只有使用.replace給一個天真的datetime a tzinfo對象。