曾几何时,我们中的一个人(Lacey)盯了一个多小时的 Python 文档[2]中描述日期和时间格式化字符串的表格。当我试图编写从 API 中将日期时间字符串转换为 Python datetime[3] 对象时,我很难理解其中的特定部分,因此我决定请求帮助。
有人问道:“为什么你不使用 dateutil 呢?”
读者,如果你没有从这个月的 Python 专栏中获得任何东西,只是学习到有比 datetime 的 strptime 更容易地将 datetime 字符串转换为 datetime 对象的方法,那么我们觉得就已经成功了。
但是,除了将字符串转换为更有用的 Python 对象之外,还有许多库都有一些有用的方法和工具,可以让您更轻松地进行时间测试、将时间转换为不同的时区、以人类可读的格式传递时间信息,等等。如果这是你在 Python 中第一次接触日期和时间,请暂停并阅读 如何使用 Python的日期和时间[3] 。要理解为什么在编程中处理日期和时间是困难的,请阅读 愚蠢的程序员相信时间[4]。
这篇文章将会向你介绍以下库:
◈ Dateutil[5]
◈ Arrow[6]
◈ Moment[7]
◈ Maya[8]
◈ Delorean[9]
◈ Freezegun[10]
随意跳过那些你已经熟悉的库,专注于那些对你而言是新的库。
内建的 datetime 模块
在跳转到其他库之前,让我们回顾一下如何使用 datetime 模块将日期字符串转换为 Python datetime 对象。
假设我们从 API 接受到一个日期字符串,并且需要它作为 Python datetime 对象存在:
2018-04-29T17:45:25Z
这个字符串包括:
◈ 日期是 YYYY-MM-DD 格式的
◈ 字母 T 表示时间即将到来
◈ 时间是 HH:II:SS 格式的
◈ 表示此时间的时区指示符 Z 采用 UTC (详细了解日期时间字符格式[11])
要使用 datetime 模块将此字符串转换为 Python datetime 对象,你应该从 strptime 开始。 datetime.strptime 接受日期字符串和格式化字符并返回一个 Python datetime 对象。
我们必须手动将日期时间字符串的每个部分转换为 Python 的 datetime.strptime 可以理解的合适的格式化字符串。四位数年份由 %Y 表示,两位数月份是 %m,两位数的日期是 %d。在 24 小时制中,小时是 %H,