默认%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月或八月的第11天的第8天目前尚不清楚;您的%x
使用说明前者,但我怀疑你应该不是解释值的其他方式:
'%d/%m/%Y %H:%M:%S %z'
另一种方法是从默认C
切换你的Python语言环境en_US
在今年会使用4位数字。