我在 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.%%
有什么解决办法吗?
我在 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.%%
有什么解决办法吗?
您的问题出在字符串的最后两个字符中:%%
%%
匹配%
输入中的 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)
尝试添加.%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 之前不可用,并且如果您不需要捕获微秒,您可以尝试这样的事情(粗略的想法是在周期上拆分并采用第一个元素 - 可能会被优化) :datetime
time
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)