2012-03-01 89 views
37

我接受日期時間爲各種格式的字符串系統(在Python開發),我必須解析 them..Currently時間字符串格式爲:在Python中解析datetime ..?

Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

現在我想一個通用解析器,可以在適當的日期時間對象中轉換任何這些日期時間格式...

否則,我必須去解析他們單獨。所以請提供分別解析它們的方法(如果沒有泛型解析器).. !!

回答

52

由於@TimPietzcker建議,在dateutil包是要走的路,它正確和自動處理第3種格式:

>>> from dateutil.parser import parse 
>>> parse("Fri Sep 25 18:09:49 -0500 2009") 
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000)) 
>>> parse("2008-06-29T00:42:18.000Z") 
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc()) 
>>> parse("2011-07-16T21:46:39Z") 
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc()) 

似乎希克上來就unixtime格式,但幸運的是標準datetime.datetime是彌補了任務:

>>> from datetime import datetime 
>>> datetime.utcfromtimestamp(float("1294989360")) 
datetime.datetime(2011, 1, 14, 7, 16) 

這是相當容易使一個功能出了這是處理所有4種格式:

from dateutil.parser import parse 
from datetime import datetime 

def parse_time(s): 
    try: 
     ret = parse(s) 
    except ValueError: 
     ret = datetime.utcfromtimestamp(s) 
    return ret 
+0

實際上,這是我已經做了什麼,@TimPietzcker建議時......你可以在評論中看到.. !! ..但是對於真棒回覆(和代碼描述)而言,thanx .. !! – 2012-03-01 12:49:14

+0

要安裝dateutil:'pip install python-dateutil'。這就像他們希望你認爲這不是一個合法的包,當他們不提供如何通過'pip'安裝它。 – ArtOfWarfare 2017-10-25 19:54:54

14

你應該看看dateutil包。

+6

特別是'dateutil.parser.parse()' – Kimvais 2012-03-01 12:18:34

+0

thanx爲答案.. !! ..但一件事..「dateutil.parser.parse」解析前3個日期格式..但它不能解析最後的日期格式(這是一個很長的值)..它顯示了「年度超出範圍」異常...但python內置日期時間模塊能夠解析這個長期價值..爲什麼這樣.. ?? – 2012-03-01 12:31:24