如何解析ISO 8601格式的日期?

我須要將RFC 3339字符串(如"2008-09-03T20:56:35.450686Z"解析爲Python的datetime類型。 python

我在Python標準庫中找到了strptime ,但這不是很方便。 git

作這個的最好方式是什麼? github


#1樓

您獲得的確切錯誤是什麼? 像下面嗎? 測試

>>> datetime.datetime.strptime("2008-08-12T12:20:30.656234Z", "%Y-%m-%dT%H:%M:%S.Z")
ValueError: time data did not match format:  data=2008-08-12T12:20:30.656234Z  fmt=%Y-%m-%dT%H:%M:%S.Z

若是是,則能夠在「。」上分割輸入字符串,而後將微秒添加到得到的日期時間。 spa

嘗試這個: code

>>> def gt(dt_str):
        dt, _, us= dt_str.partition(".")
        dt= datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S")
        us= int(us.rstrip("Z"), 10)
        return dt + datetime.timedelta(microseconds=us)

>>> gt("2008-08-12T12:20:30.656234Z")
datetime.datetime(2008, 8, 12, 12, 20, 30, 656234)

#2樓

import re,datetime
s="2008-09-03T20:56:35.450686Z"
d=datetime.datetime(*map(int, re.split('[^\d]', s)[:-1]))

#3樓

嘗試使用iso8601模塊; 它正是這樣作的。 orm

python.org Wiki上的WorkingWithTime頁面上提到了其餘幾個選項。 ip


#4樓

請注意,在Python 2.6+和Py3K中,%f字符捕獲微秒。 字符串

>>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")

在這裏查看問題 get


#5樓

我已經爲ISO 8601標準編寫了一個解析器,並將其放在GitHub上: https : //github.com/boxed/iso8601 。 此實現支持規範中的全部內容,但持續時間,間隔,週期性間隔和日期不在Python datetime模塊支持的日期範圍內。

測試包括在內! :P

相關文章
相關標籤/搜索