2016-04-13 54 views
1

我有一個繁瑣的函數,它是這樣的:蟒蛇任何時間字符串轉換爲UTC

... 
if ('PDT' in stringVal) or ('PST' in stringVal): 
    utcdateTime = convert(stringVal)+(hardcode the offset) 
elif('EDT' in stringVal)... 
... 

我看了幾個帖子包括this但找不到任何適合我的目的。我一般也看過datetime.datetime和整個datetime模塊,但它有.now()這樣的東西; .utcnow(); datetime.now(tz.pytz.utc)等等等等,基本上,如果我有這樣的:

2014-05-01 01:02:03 PDT 
2014-05-01 01:02:03 PST 
2014-05-01 01:02:03 EDT 
2014-05-01 01:02:03 EST 
2014-05-01 01:02:03 MDT 
2014-05-01 01:02:03 MST 

有沒有,有一些方法,我可以使用上述日期時間字符串轉換爲UTC一個Python模塊?如果沒有,我會堅持我的硬編碼方式。

+0

不完全是重複的,而是一個類似/反向的問題。你應該找到如何解析時區,並在答案中從本地轉換爲utc。 – viraptor

+0

這兩個似乎都不重複,一個不處理時區,另一個做相反的處理,從UTC –

+0

@BrendanAbel轉換。反過來並不是相反的。你使用帶時區作爲參數的'.astimezone(...)'。當然,如果你可以寫任何Python,你可以概括這個答案。 – viraptor

回答

1

您需要翻譯時區字符串,但除此之外,您可以使用datetimepytz庫。

import datetime 
import pytz 

s = '2014-05-01 01:02:03 PST' 
ds, tzs = s.rsplit(' ', 1) 

tz_map = { 
    'PST': 'US/Pacific', 
    'EST': 'US/Eastern' 
} 
tz = pytz.timezone(tz_map[tzs]) 

dt = datetime.datetime.strptime(ds, '%Y-%m-%d %H:%M:%S').replace(tzinfo=tz) 
dt_utc = dt.astimezone(pytz.utc) 
+0

在第5行有一個錯誤:由'''分割將導致返回三個值,而不是兩個。 – Cyb3rFly3r

+0

謝謝,應該有一個1作爲第二個參數。 –

+0

@BrendanAbel如何處理「PDT」和「EDT」等? –