2016-12-16 22 views
0

我有如下格式的字符串时Python的 - 时间数据不匹配格式

2016-12-10T13:54:15.294

我使用下面的方法来格式化时间:

time.strptime(ts, '%b %d %H:%M:%S %Y')

会抛出一个错误:
time data did not match format: data=2016-12-10T13:54:15.294 fmt=%a %b %d %H:%M:%S %Y

任何想法哪里出错?

回答

3

您需要先解析字符串格式化,然后打印出您想要的方式。

>>> import datetime 
>>> ts = "2016-12-10T13:54:15.294" 
>>> parsed = datetime.datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%f') 
>>> parsed 
datetime.datetime(2016, 12, 10, 13, 54, 15, 294000) 
>>> parsed.strftime('%b %d %H:%M:%S %Y') 
'Dec 10 13:54:15 2016' 
+0

T汉克斯。我跟着这个,现在又有了一个错误: 'KeyError:'f'' – Arpit

+0

更多信息:'Python 2.3.4' – Arpit

+0

哇。 Python 2.3!我甚至不知道这样的版本还在疯狂。它不工作的原因是因为在Python 2.6中添加了'f'修饰符 - 我强烈建议您升级。 –

0

我认为你的日期格式在字符串中被错误地指定。这应该工作:

import datetime 
a = '2016-12-10T13:54:15.294' 
b= datetime.datetime.strptime(a,'%Y-%m-%dT%H:%M:%S.%f') 
print b 
0

错误没有错,格式字符串甚至没有接近你想要解析的字符串。

您有{year}-{month}-{day}T{hour}:{minute}:{second}.{milliseconds}但试图用{weekday name} {month name} {day} {hour}:{minute}:{second} {year}解析它。你从某处复制了这个吗?

According to the documentation,你的格式字符串应该看起来更像%Y-%m-%dT%H:%M:%S.%f

>>> time.strptime('2016-12-10T13:54:15.294', '%Y-%m-%dT%H:%M:%S.%f') 
time.struct_time(tm_year=2016, tm_mon=12, tm_mday=10, tm_hour=13, tm_min=54, tm_sec=15, tm_wday=5, tm_yday=345, tm_isdst=-1) 
0

您的格式字符串不正确。

您可以使用日期对象的方法strftime检查格式字符串。例如:

d = datetime.datetime.now() 
print(d.strftime('%Y-%d-%mT%H:%M:%S')) 

输出:

Dec 16 11:02:46 2016 

但是你必须字符串格式如下2016-12-10T13:54:15.294,所以你只需要改变format字符串:

print(time.strptime(ts, '%Y-%d-%mT%H:%M:%S.%f')) 

输出:

time.struct_time(tm_year=2016, tm_mon=10, tm_mday=12, tm_hour=13, tm_min=54, tm_sec=15, tm_wday=2, tm_yday=286, tm_isdst=-1) 
相关问题