我需要将像“2008-09-03T20:56:35.450686Z”这样的RFC 3339字符串解析为Python的日期时间类型.
我在Python标准库中找到了strptime
,但它不是很方便.
做这个的最好方式是什么?
解决方法:
python-dateutil包不仅可以解析RFC 3339日期时间字符串,例如问题中的字符串,还可以解析不符合RFC 3339的其他ISO 8601个日期和时间字符串(例如没有UTC偏移的字符串或仅代表RFC偏移的字符串)一个约会).
>>> import dateutil.parser
>>> dateutil.parser.parse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
>>> dateutil.parser.parse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.parse('20080903T205635.450686') # ISO 8601 basic format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.parse('20080903') # ISO 8601 basic format, date only
datetime.datetime(2008, 9, 3, 0, 0)
请注意,dateutil.parser是故意hacky:它试图猜测格式并在不明确的情况下做出不可避免的假设(仅可手工定制).因此,如果您需要解析未知格式的输入并且可以容忍偶尔的误读,那么只能使用它. (感谢ivan_pozdeev)
Pypi名称是python-dateutil
,而不是dateutil(感谢code3monk3y):
pip install python-dateutil
如果您使用的是Python 3.7,请查看有关datetime.datetime.fromisoformat的this answer.