2012-11-28 63 views
0

我正在將一個字符串轉換爲python 2.4中的時間對象。時間數據與strptime中的錯誤不匹配

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

嘗試增加.%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/time不可預2.6,如果你不需要捕獲微秒,你可以嘗試這樣的東西(粗糙的想法分裂在pe上荒漠化問題和採取的第一個元素 - 有可能成爲優化):

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) 
+0

我得到 「KeyError異常: 'F'」。我正在使用python 2.4 – thavan

+0

@thavan啊,對不起,應該把Python 2.6+部分放在那裏。這並不理想,但會修改字符串以去掉微秒部分是一個選項嗎? – RocketDonkey

+0

我不需要微秒。是否可以省略那部分? – thavan

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) 
+0

日期時間沒有strptime方法的最佳途徑。 – thavan

+0

@thavan了'datetime'模塊沒有,但是'datetime.datetime'一樣。見我進口:) –

+0

我覺得2.4部分被投擲我們都關閉:) – RocketDonkey

相關問題