2009-02-10 78 views
14

我有一個文本文件,在isoformat中有很多日期時間字符串。字符串是類似於:解析日期時間字符串,微秒

'2009-02-10 16:06:52.598800' 使用str(datetime_object)產生

這些字符串。問題是,由於某種原因,str(datetime_object)生成時的日期時間對象微秒設置爲零不同的格式和一些字符串看起來像這樣:

「2009-02-10 16點06分52秒」

我如何解析這些字符串並將它們轉換爲datetime object

獲取對象中的所有數據非常重要,包括微秒。

我必須使用Python 2.5,我發現格式指令%f微秒不存在於2.5中。

回答

21

或者:

from datetime import datetime 

def str2datetime(s): 
    parts = s.split('.') 
    dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S") 
    return dt.replace(microsecond=int(parts[1])) 

使用strptime本身解析日期/時間字符串(所以沒必要想出一個正則表達式的角落案例)。

+0

感謝這個答案!我建議將最後一行更改爲: return dt.replace(microsecond = int(1000 * float('0.'+ parts [1]))) 這會正確處理所有情況, '2017-03-16 21:20:57.31' 應該給310us而不是31us。 – denizb 2017-03-17 14:54:25

5

有人已經提出了這個問題的錯誤:Issue 1982。既然你需要這個來使用python 2.5,你必須解析manualy的值,然後操作datetime對象。

2

它可能不是最好的解決辦法,但你可以使用正則表達式:

m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr) 
dt = datetime.datetime(*[int(x) for x in m.groups() if x]) 
10

使用dateutil模塊。它支持更多的日期和時間格式,而不是內置的Python格式。

你需要easy_install的dateutil以下代碼工作:

from dateutil.parser import parser 

p = parser() 
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800') 
print datetime_with_microseconds.microsecond 

結果:

598799 
+0

+1 dateutil一路 – Yarin 2012-03-01 18:46:02