isoparse
函数来自python-dateutil
The python-dateutil包有dateutil.parser.isoparse不仅解析 RFC 3339 日期时间字符串(如问题中的字符串),还解析其他字符串ISO 8601不符合 RFC 3339 的日期和时间字符串(例如没有 UTC 偏移量的字符串,或仅表示日期的字符串)。
>>> import dateutil.parser
>>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
>>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.isoparse('20080903T205635.450686') # ISO 8601 basic format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.isoparse('20080903') # ISO 8601 basic format, date only
datetime.datetime(2008, 9, 3, 0, 0)
The python-dateutil包里还有dateutil.parser.parse。和....相比isoparse
,它可能不太严格,但是它们都非常宽容,并且会尝试解释您传入的字符串。如果您想消除任何误读的可能性,您需要使用比这两个函数更严格的函数。
与Python 3.7+内置的比较datetime.datetime.fromisoformat
dateutil.parser.isoparse
是一个完整的 ISO-8601 格式解析器,但在 Python ≤ 3.10 中fromisoformat
是故意的not。在Python 3.11中,fromisoformat
支持有效 ISO 8601 中的几乎所有字符串。请参阅fromisoformat
有关此警告的文档。 (看这个答案).