Python 3.4 strptime()不起作用

时间:2014-09-03 14:59:17

标签: python datetime strptime

我正在尝试将字符串转换为日期时间,但它无效...

self.loadsList[loadID][5] = datetime.strptime(
self.loadsList[loadID][5]+" "+self.loadsList[loadID][6], "%x %X %z")

并且它引发了一个值错误。

ValueError: time data '11/08/2014 04:00:00 -0500' does not match format '%x %X %z'

我做错了什么?谢谢! (Python 3.4)

1 个答案:

答案 0 :(得分:2)

默认%x格式相当于%d/%m/%y,其中%y匹配两位数年份

>>> import locale
>>> locale.nl_langinfo(locale.D_FMT)
'%m/%d/%y'

您的输入使用的是4位数年份:

>>> from datetime import datetime
>>> datetime.strptime('11/08/2014', '%x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.4/_strptime.py", line 340, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: 14

我不会使用%x%X,只需拼出日期和时间格式;根据您的输入和%x的使用情况:

'%m/%d/%Y %H:%M:%S %z'

演示:

>>> datetime.strptime('11/08/2014 04:00:00 -0500', '%m/%d/%Y %H:%M:%S %z')
datetime.datetime(2014, 11, 8, 4, 0, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))

目前尚不清楚您的输入是代表11月8日还是8月11日;你对%x的使用暗示了前者,但我怀疑你应该反过来解释这个价值:

'%d/%m/%Y %H:%M:%S %z'

另一种方法是将您的Python语言环境从默认的C切换到en_US,其中年份使用4位数。