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

新手上路,请多包涵

我需要将 "2008-09-03T20:56:35.450686Z" 之类的 RFC 3339 字符串解析为 Python 的 datetime 类型。

我在Python标准库中找到了 strptime ,但不是很方便。

做这个的最好方式是什么?

原文由 Alexander Artemenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 807
1 个回答

isoparse 来自 python-dateutil 的 函数

python-dateutil 包有 dateutil.parser.isoparse 不仅可以解析问题中的 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)

python-dateutil 包也有 dateutil.parser.parse 。与 isoparse 相比,它可能不太严格,但它们都非常宽容,并且会尝试解释您传入的字符串。如果您想消除任何误读的可能性,您需要使用比这两个函数中的任何一个都严格的东西。

与Python 3.7+的内置比较 datetime.datetime.fromisoformat

dateutil.parser.isoparse 是完整的 ISO-8601 格式解析器,但在 Python ≤ 3.10 中 fromisoformat 故意 _不是_。在 Python 3.11 中, fromisoformat 支持有效 ISO 8601 中的几乎所有字符串。请参阅 fromisoformat 的文档了解此警告。 (见 这个答案)。

原文由 Flimm 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题