如何解析ISO 8601格式的日期?
时间:2020-03-06 14:40:10 来源:igfitidea点击:
我需要将RFC 3339字符串(如" 2008-09-03T20:56:35.450686Z")解析为Python的" datetime"类型。
我在Python标准库中找到了" strptime",但这不是很方便。
做这个的最好方式是什么?
解决方案
我们得到的确切错误是什么?是否如下所示:
>>> 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
如果是,则可以在"。"上分割输入字符串,然后将微秒添加到获得的日期时间。
试试这个:
>>> 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) >>>
import re,datetime s="2008-09-03T20:56:35.450686Z" d=datetime.datetime(*map(int, re.split('[^\d]', s)[:-1]))
尝试使用iso8601模块;它正是这样做的。
python.org Wiki上的WorkingWithTime页面上提到了其他几个选项。
请注意,在Python 2.6+和Py3K中,%f字符捕获微秒。
>>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")
在这里查看问题