2014-09-03 65 views
0

我试图将字符串时间值转换,它是不工作...的Python 3.4 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

默认%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位数字。