Python - 具有未知行为的strptime格式

时间:2015-01-17 05:09:24

标签: python datetime strptime

我有时间格式:

Sat Jan 17 04:33:06 +0000 2015

我无法匹配strptime格式。我能找到最接近的地方:basic datetime types是%c“Locale的适当日期和时间表示。”但是,这并不完全匹配。

我要去:

time_vec = [datetime.strptime(str(x),'%c') for x in data['time']]

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

对我来说很好......:

>>> s='Sat Jan 17 04:33:06 +0000 2015'
>>> f='%a %b %d %X %z %Y'
>>> import datetime
>>> datetime.datetime.strptime(s,f)
datetime.datetime(2015, 1, 17, 4, 33, 6, tzinfo=datetime.timezone.utc)

这是在Python 3.4中。在Python 2.7中,我可以重现您的错误 - 它不接受%z它应该。当然,最好的解决方法是升级到Python 3。如果你不能,你需要一些黑客:

import re

s = re.sub('[+-]\d+', '', s)

并从格式中删除%z。如果您确实需要该时区信息,请先在re.search“清除”re.sub之前将其解压缩(使用s,相同模式)以解决Python 2错误。

答案 1 :(得分:3)

>>> from dateutil import parser
>>> s = "Sat Jan 17 04:33:06 +0000 2015"
>>> dt = parser.parse(s)
>>> dt
datetime.datetime(2015, 1, 17, 4, 33, 6, tzinfo=tzutc())

这是使用dateutil包来parse你的字符串并返回一个datetime对象。


附注:您引用的错误表明问题已在Python 3.2中得到解决。我的假设是你没有使用Python 3,因此有错误。