0

我在 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.%%

有什么解决办法吗?

4

2 回答 2

4

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

%%匹配%输入中的 a。你想匹配微秒,所以你应该使用 %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)
于 2012-11-28T05:56:29.167 回答
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参数在2.6 之前不可用,并且如果您不需要捕获微秒,您可以尝试这样的事情(粗略的想法是在周期上拆分并采用第一个元素 - 可能会被优化) :datetimetime

In [20]: import time

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

In [22]: d2_noms = d2.split('.')[0]

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

In [24]: d1
Out[24]: 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)
于 2012-11-28T05:55:29.880 回答