這似乎是錯誤的:
>>> import pytz
>>> z1 = timezone('America/Edmonton')
>>> z2 = timezone('US/Mountain')
>>> z1
<DstTzInfo 'America/Edmonton' LMT-1 day, 16:26:00 STD>
>>> z2
<DstTzInfo 'US/Mountain' MST-1 day, 17:00:00 STD>
>>> pytz.VERSION
'2012f'
>>>
'美國/埃德蒙頓' 和「美國/東部'應該是同一時區(17:00:00 STD)。更何況16:26:00沒有任何意義。
- 更新-
上述在Jon Skeet的回答中是有意義的。然而,當我這樣做的事情變得奇怪:
>>> d = datetime.now()
>>> d
datetime.datetime(2012, 10, 9, 15, 21, 41, 644706)
我創建了一個天真的日期。由於「美國/埃德蒙頓是我的時區,我嘗試手動設置:
這應該不會改變任何東西,因爲這是正確的TZ。但是:
>>> d2.astimezone(timezone('US/Eastern'))
datetime.datetime(2012, 10, 9, 18, 55, 41, 644706, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
這應該給我2個小時(「美國/東方」和「美洲/埃德蒙頓」之間的差值)偏移,但它給了我3小時26分(其中有2小時加一個小時26分鐘:D)
插入timezone('US/Mountain')
在astimezone()
中產生正確的結果。使用'America/Edmonton'創建一個有意識的日期時間也可以正常工作。
會發生什麼事,當你構建'datetime'與在場的時區與啓動,而不是使用'replace'? (它確實看起來像是基本上壞了......) –
然後它工作正常。可悲的是,這不是我的選擇,因爲天真的日期時間是由另一個函數返回的,我無法控制:( – Goro