时间数据与strptime中的错误不匹配

时间:2012-11-28 05:53:12

标签: python

我在python 2.4中将字符串转换为时间对象。

d1 = time.strptime(d2, '%Y-%m-%d %H:%M:%S.%%')

这里d2是'2012-11-07 13:41:13.138807'

我收到以下错误。

ValueError: time data did not match format:  data=2012-11-07 13:41:13.138807  fmt=%Y-%m-%d %H:%M:%S.%%

任何解决方案?

2 个答案:

答案 0 :(得分:4)

您的问题出现在字符串的最后两个字符中:%%

%%与输入中的%匹配。您希望匹配微秒,so you should use %f

>>> from datetime import datetime
>>> d2 = '2012-11-07 13:41:13.138807'
>>> datetime.strptime(d2, '%Y-%m-%d %H:%M:%S.%f')
datetime.datetime(2012, 11, 7, 13, 41, 13, 138807)

答案 1 :(得分:2)

尝试将.%f添加到您的字符串(Python 2.6+)中,该字符串应该处理该值(尽管它似乎没有存储):

In [5]: import time

In [6]: d2 = '2012-11-07 13:41:13.138807'

In [7]: d1 = time.strptime(d2, '%Y-%m-%d %H:%M:%S.%f')

In [8]: d1
Out[8]: time.struct_time(tm_year=2012, tm_mon=11, tm_mday=7, tm_hour=13, tm_min=41, tm_sec=13, tm_wday=2, tm_yday=312, tm_isdst=-1)

如果需要,来自@bradleyayers的解决方案将准确捕获您的微秒值,所以如果您需要,我建议使用他的方式:)

由于%f / datetime的{​​{1}}参数在2.6之前不可用,如果您不需要捕获微秒,您可以尝试这样的事情(分裂时期并采用第一个元素的粗略想法 - 可能会被优化):

time