python-dateutil包不仅可以解析 RFC 3339 日期时间字符串(例如问题中的字符串),还可以解析其他不符合 RFC 3339 的 ISO 8601日期和时间字符串(例如不具有 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)
请注意, dateutil.parser.isoparse
可能比更dateutil.parser.parse
更严格,但是它们两者都是相当宽容的,并且会尝试解释您传入的字符串。如果您想消除任何误读的可能性,您需要使用比这两个功能中的任何一个都严格的内容。
Pypi 名称是python-dateutil
,而不是dateutil
(感谢code3monk3y ):
pip install python-dateutil
如果您使用的是 Python 3.7,请查看有关datetime.datetime.fromisoformat
答案。
datetime
标准库引入了一个用于反转datetime.isoformat()
的函数。
classmethod
datetime.fromisoformat(date_string)
:返回
datetime
对应于date_string
中的发射的格式之一date.isoformat()
和datetime.isoformat()
具体来说,此函数支持以下格式的字符串:
YYYY-MM-DD[*HH[:MM[:SS[.mmm[mmm]]]][+HH:MM[:SS[.ffffff]]]]
*
可以匹配任何单个字符。警告:这不支持解析任意 ISO 8601 字符串 - 仅用作
datetime.isoformat()
的逆运算。
使用示例:
from datetime import datetime
date = datetime.fromisoformat('2017-01-01T12:30:59.000000')
请注意,在 Python 2.6 + 和 Py3K 中,%f 字符捕获微秒。
>>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")
在这里查看问题