我正在与一个 API 交互,该 API 提供原始 RFC 3339 日期时间字符串来表示用户生日。自然,我想将其解释为某种datetime
对象 - 但是,pythondatetime
库不支持值小于 1 的日期时间字符串。
这是 API 给出的示例日期时间字符串:(0000-09-01T00:00:00-00:00
注意年份设置为0000
)。如果我只是把datetime.fromisoformat
它扔进 ,不出所料地会引发一个错误:
In [1]: from datetime import datetime
In [2]: datetime.fromisoformat("0000-09-01T00:00:00-00:00")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-e1d8a5624d92> in <module>
----> 1 datetime.fromisoformat("0000-09-01T00:00:00-00:00")
ValueError: year 0 is out of range
如果我要完全删除字符串的年份部分,它会给出以下内容:
In [1]: from datetime import datetime
In [2]: datetime.fromisoformat("09-01T00:00:00-00:00")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-a027335f00c1> in <module>
----> 1 datetime.fromisoformat("09-01T00:00:00-00:00")
ValueError: Invalid isoformat string: '09-01T00:00:00-00:00'
起初,我认为这是一个错误或限制。但经过一番研究,我发现RFC3339 标准在其介绍中声明了以下内容:
假定所有日期和时间都在“当前时代”,介于公元 0000 年和公元 9999 年之间。
假设这个范围是包容性的(这是基于标准中“介于”一词的其他用法,尽管从未严格指定),暗示 datetime 模块不符合 RFC3339 标准,因为它是硬编码的最小和最大年份值,并使其成为必需值。但是,它从未声称它确实符合标准。所以新的问题是,如果包含的库不支持 RFC3339,那是什么?
我的问题是:有没有一种方法可以将此字符串解释为某种日期时间对象或使用第三方库?