如何将 ISO 8601 日期时间字符串转换为 Python 日期时间对象?

新手上路,请多包涵

我得到一个格式为“2009-05-28T16:15:00”的日期时间字符串(我相信这是 ISO 8601)。一个 hackish 选项似乎是使用 time.strptime 解析字符串,并将元组的前六个元素传递给 datetime 构造函数,例如:

 datetime.datetime(*time.strptime("2007-03-04T21:08:12", "%Y-%m-%dT%H:%M:%S")[:6])

我一直无法找到一种“更清洁”的方式来做到这一点。有吗?

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

阅读 1.5k
2 个回答

我更喜欢使用 dateutil 库进行时区处理和通常可靠的日期解析。如果你要得到一个 ISO 8601 字符串,如: 2010-05-08T23:41:54.000Z 你会很开心用 strptime 解析它,特别是如果你事先不知道时区是否是包括。 pyiso8601 我在使用过程中遇到了几个问题(检查他们的跟踪器),并且几年没有更新。相比之下,dateutil 一直很活跃并为我工作:

 from dateutil import parser
yourdate = parser.parse(datestring)

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

由于 Python 3.7 并且没有外部库,您可以使用 datetime 模块 中的 fromisoformat 函数

 datetime.datetime.fromisoformat('2019-01-04T16:41:24+02:00')

Python 2 不支持 %z 格式说明符,因此最好尽可能在任何地方显式使用祖鲁时间:

 datetime.datetime.strptime("2007-03-04T21:08:12Z", "%Y-%m-%dT%H:%M:%SZ")

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

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