在 Python 3.10.8 中,如果我写
from datetime import datetime
print(datetime.fromisoformat('2011-11-04T00:05:23Z'))
我得到错误
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(datetime.fromisoformat('2011-11-04T00:05:23Z'))
ValueError: Invalid isoformat string: '2011-11-04T00:05:23Z'
datetime
模块文档:
>>> from datetime import datetime
# ...
>>> datetime.fromisoformat('2011-11-04T00:05:23Z')
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc)
这是错误还是文档中的错误?
在 Python 3.11 之前,
fromisoformat
需要与 isoformat
相同的格式。
Python
isoformat
不包含时区信息,因此没有尾随 Z
,因此出现错误。
来自 3.10 文档:
注意 - 这不支持解析任意 ISO 8601 字符串 - 它仅用作 datetime.isoformat() 的逆运算 https://docs.python.org/3.10/library/datetime.html#datetime.datetime.fromisoformat
来自 >=3.11 文档:
在版本 3.11 中更改:以前,此方法仅支持 date.isoformat() 或 datetime.isoformat() 可以发出的格式:https://docs.python.org/3/library/datetime.html#datetime .datetime.fromisoformat
例子
>>> from datetime import datetime
>>> datetime.fromisoformat('2011-11-04T00:05:23Z')
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc)
datetime
文档中的仅存在于Python 3.11+中。它在 Python 3.10. 中丢失
在
BPO 35829/
BPO 46614for Python 3.11 中引入了
datetime.isoformat
解析尾随Z
后缀作为+00:00
别名的能力。