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

我需要将像“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.

上一篇:java – ISO 8601 Android中的字符串到日期/时间对象


下一篇:java.util.Formatter:UnknownFormatConversionException:Conversion =’F’