这个问题在这里已经有了答案:




8年前关闭。





'Saturday, December 22, 2012 1:22:24 PM EST' does not match format '%A, %B %d, %Y %I:%M:%S %p %Z'

也许我遗漏了一些东西,但谁能发现为什么这不能正确验证?

最佳答案

strptime() 函数不能很好地处理 %Z 时区解析。仅真正支持 UTC 和 GMT,以及 time.tzname 的当前值。查看 strptime documenation :



删除输入的 EST 部分和格式字符串的 %Z 部分使事情起作用:

>>> import time
>>> time.strptime('Saturday, December 22, 2012 1:22:24 PM EST', '%A, %B %d, %Y %I:%M:%S %p %Z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/_strptime.py", line 454, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data 'Saturday, December 22, 2012 1:22:24 PM EST' does not match format '%A, %B %d, %Y %I:%M:%S %p %Z'
>>> time.strptime('Saturday, December 22, 2012 1:22:24 PM', '%A, %B %d, %Y %I:%M:%S %p')
time.struct_time(tm_year=2012, tm_mon=12, tm_mday=22, tm_hour=13, tm_min=22, tm_sec=24, tm_wday=5, tm_yday=357, tm_isdst=-1)

或用 EST 替换时区 GMT :
>>> time.strptime('Saturday, December 22, 2012 1:22:24 PM GMT', '%A, %B %d, %Y %I:%M:%S %p %Z')
time.struct_time(tm_year=2012, tm_mon=12, tm_mday=22, tm_hour=13, tm_min=22, tm_sec=24, tm_wday=5, tm_yday=357, tm_isdst=0)

要解析时区不是 time.tznameGMTUTC 的字符串,请使用不同的日期解析库。 dateutil library 有一个很好的 parse function 可以正确处理时区:
>>> from dateutil.parser import parse
>>> parse('Saturday, December 22, 2012 1:22:24 PM EST', tzinfos={'EST': -18000})
datetime.datetime(2012, 12, 22, 13, 22, 24, tzinfo=tzoffset(u'EST', -18000))

使用 dateutil.parser.parse() 时,您必须为您的格式提供自己的时区偏移量。

关于python - 使用 strptime 的日期格式不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14067346/

10-12 16:13