2014-10-18 84 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

相关问题