2014-10-18 83 views
4

我試圖將字符串轉換爲日期時間對象。 我從新聞提要得到的字符串格式如下: 「Thu,2014年10月16日01:16:17 EDT」將字符串轉換爲日期時間對象

我嘗試使用datetime.strptime()將其轉換。 即

datetime.strptime('Thu, 16 Oct 2014 01:16:17 EDT','%a, %d %b %Y %H:%M:%S %Z') 

而且得到了以下錯誤:

Traceback (most recent call last):
  File "", line 1, in datetime.strptime('Thu, 16 Oct 2014 01:16:17 EDT','%a, %d %b %Y %H:%M:%S %Z')
  File "C:\Anaconda\lib_strptime.py", line 325, in _strptime (data_string, format))
ValueError: time data 'Thu, 16 Oct 2014 01:16:17 EDT' does not match format '%a, %d %b %Y %H:%M:%S %Z'

但是,如果我試圖字符串沒有 「EDT」,它的工作。 即

datetime.strptime('Thu, 16 Oct 2014 01:16:17','%a, %d %b %Y %H:%M:%S') 

有沒有人知道如何解析「EDT」部分?

+1

相關:[Python:從電子郵件解析日期和時區](http://stackoverflow.com/q/1790795/4279)。 – jfs 2014-10-18 02:21:58

+0

相關:[我如何解析Python中的HTTP日期字符串?](http://stackoverflow.com/q/1471987/4279) – jfs 2014-10-22 04:25:23

回答

7

爲了解析日期RFC 2822 format,你可以使用email包:

from datetime import datetime, timedelta 
from email.utils import parsedate_tz, mktime_tz 

timestamp = mktime_tz(parsedate_tz("Thu, 16 Oct 2014 01:16:17 EDT")) 
# -> 1413436577 
utc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp) 
# -> datetime.datetime(2014, 10, 16, 5, 16, 17) 

注:parsedate_tz()假設EDT對應-0400 UTC偏移,但其中EDT是+1100它可能是在澳大利亞不正確(使用澳洲東部時間在這種情況下爲pytz),即,時區縮寫可能不明確。見Parsing date/time string with timezone abbreviated name in Python?

相關的Python bug:%Z in strptime doesn't match EST and others

+0

感謝您的幫助! – 2014-10-18 02:32:52

+0

@ user2629723如果答案有助於解決您的問題,請選中旁邊的複選標記。這樣做表明您的問題已得到解決,並且還爲您和回答者頒發了聲譽。請參閱「[接受答案如何工作?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)」以獲取更多信息。 – MattDMo 2014-10-18 03:49:05

+0

在這裏,我認爲應該做_x_會做_x _...真正熱氣騰騰的堆 – zelusp 2016-09-27 23:06:44

相關問題