datetime.fromisoformat 的文档示例引发无效的等格式字符串错误

问题描述 投票:0回答:2

在 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 python-3.x datetime python-datetime
2个回答
3
投票

在 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


0
投票

例子

>>> 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 46614
for Python 3.11 中引入了
datetime.isoformat
解析尾随Z 后缀作为+00:00 别名的能力。

© www.soinside.com 2019 - 2024. All rights reserved.