Converting string to datetime object
我试图将字符串转换为日期时间对象。我从新闻订阅源获得的字符串格式如下:"2014年10月16日星期四,美国东部夏令时01:16:17"
我尝试使用datetime.strptime()来转换它。即。,
1 | 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"的字符串,它会起作用。即。,
1 | datetime.strptime('Thu, 16 Oct 2014 01:16:17','%a, %d %b %Y %H:%M:%S') |
号
有人知道如何解析这个"edt"部分吗?
要以RFC2822格式解析日期,可以使用
1 2 3 4 5 6 7 | 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) |
注:
相关的python错误:strptime中的%z与est和其他错误不匹配。
如果您的计算机使用POSIX时间戳(可能),并且您确信输入日期在系统可接受的范围内(不太远,将来/过去),并且您不需要保持微秒精度,那么您可以使用
1 2 3 4 5 6 7 | from datetime import datetime 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.utcfromtimestamp(timestamp) # -> datetime.datetime(2014, 10, 16, 5, 16, 17) |
号