提问人:Marco Ocram 提问时间:3/28/2023 最后编辑:Dima ChubarovMarco Ocram 更新时间:3/29/2023 访问量:1111
datetime.fromisoformat 的文档示例引发无效的 isoformat 字符串错误
Documentation example for datetime.fromisoformat raises invalid isoformat string error
问:
在 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)
这是文档中的错误还是错误?
答:
4赞
match
3/28/2023
#1
在 Python 3.11 之前,需要与 .fromisoformat
isoformat
Python 不支持尾随作为 +00:00 的别名,因此出现错误。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
评论
1赞
Brian61354270
3/28/2023
“Python isoformat 不包含时区信息”似乎具有误导性。类似的东西是完全有效的。只是不支持用作别名。datetime.fromisoformat('2011-11-04T00:05:23.234+04:00')
datetime(..., tzinfo=timezone.utc).isoformat()
Z
+00:00
0赞
match
3/29/2023
已经澄清了尾随 Z。
0赞
Brian61354270
3/28/2023
#2
示例
>>> 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+ 中。它在 Python 3.10 中缺失。datetime
在 Python 3.11 的 BPO 35829 / BPO 46614 中引入了将尾随后缀解析为别名的功能。datetime.isoformat
Z
+00:00
评论
date.isoformat()
datetime.isoformat()