2013-10-22 43 views
17

我試圖將始終處於太平洋時間的幼稚時間戳轉換爲UTC時間。在下面的代碼中,我可以指定我擁有的這個時間戳是在太平洋時間,但它似乎不知道它應該是UTC的-7小時的偏移量,因爲它只有10/21,而DST有尚未結束。Python:如何在不知道DST是否生效的情況下將時區感知時間戳轉換爲UTC

腳本:

import pytz 
import datetime 
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S") 
localtz = pytz.timezone('America/Los_Angeles') 
date_aware_la = naive_date.replace(tzinfo=localtz) 
print date_aware_la 

輸出:

2013-10-21 08:44:08-08:00 

這應該有-07的偏移:00至DST在11月3日結束。如何在DST正確且無效時讓我的時區知曉日期具有正確的偏移量? Pytz是否足夠聰明地知道DST將在11月3日生效?

總體目標:我只是試圖將時間戳轉換爲UTC,因爲我知道我將在太平洋時間獲得一個時間戳,而不顯示DST是否有效。我沒有從python本身生成這個日期,所以我不能僅僅使用utc_now()。

回答

22

使用localize方法:

import pytz 
import datetime 
naive_date = datetime.datetime.strptime("2013-10-21 08:44:08", "%Y-%m-%d %H:%M:%S") 
localtz = pytz.timezone('America/Los_Angeles') 
date_aware_la = localtz.localize(naive_date) 
print(date_aware_la) # 2013-10-21 08:44:08-07:00 

這被覆蓋的the pytz documentation 「示例&用法」 部分。

然後繼續UTC:

utc_date = date_aware_la.astimezone(pytz.utc) 
print(utc_date) 
+3

斷言'naive_date'是明確的,並且存在,你可以通過'is_dst = None'到'本地化()';否則可能會默默地選擇錯誤的時間。 – jfs

相關問題