2015-05-13 54 views
0
from datetime import datetime timedelta 
import pytz 

ppt = pytz.timezone('US/Pacific') 
first = ppt.localize(datetime(2013, 3, 10, 0, 0, 0)) 
first+=timedelta(hours=2) 
first 

回報datetime.datetime(2013, 3, 10, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)這是預期的行爲還是日期時間timedelta中的錯誤?

它應該返回datetime.datetime(2013, 3, 10, 3, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

您可以通過添加小時後做astimezone(ppt)解決此,顯然,錯誤。

那麼,這是一個錯誤?我做錯了嗎?或者它是否打算在添加時間後更新代碼?

回答

2

您需要再次使用時區對象調用normalize()做日期時間算術時:

>>> first 
datetime.datetime(2013, 3, 10, 2, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>) 
>>> ppt.normalize(first) 
datetime.datetime(2013, 3, 10, 3, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>) 

如前所述in the docs

此外,如果執行本地時間跨越DST日期計算邊界,結果可能在不正確的時區。提供了一個normalize()方法來解決這個問題。

+0

嗯,我猜想錯過了那部分文檔。謝謝。 –

相關問題