我在使用Python 3.x解析包含三位数年份的日期时间字符串时遇到了一个奇怪的问题。以下是一个示例:
from datetime import datetime
format = '%Y-%m-%dT%H:%M:%SZ'
dt = datetime.strptime('0699-02-02T15:11:43Z', format)
print(dt) # datetime.datetime(699, 2, 2, 15, 11, 43)
print(dt.strftime(format)) # '699-02-02T15:11:43Z'
print(datetime.strptime(dt.strftime(format), format))
我原本期望输出结果为
datetime.datetime(699, 2, 2, 15, 11, 43)
,但是却出现了错误:Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/local/lib/python3.8/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '699-02-02T15:11:43Z' does not match format '%Y-%m-%dT%H:%M:%SZ'
根据文档,使用
%Y
应该生成带有前导零的四位数年份,但这不是strftime
的输出结果。此外,我得到的输出不能被解析回原始的datetime
,正如上面的错误所示。我可能错过了什么? 版本: 我正在使用
python:3.8
Docker镜像运行,但我也尝试过python:3.6
和python:3.10
。
python:3.8
Docker镜像运行3.8.3
版本。 - mhusaini/usr/lib/python3.6
。 - jonrsharpe