为什么Python 3会找到这个ISO 8601日期:“2019-04- 05 T16:55:26 Z”无效?

67up9zun  于 2023-02-20  发布在  Python
关注(0)|答案(4)|浏览(157)

我将"2019-04-05T16:55:26Z"提供给Python 3的datetime.datetime.fromisoformat,并得到Invalid isoformat string,尽管没有Z也可以使用相同的字符串。ISO 8601允许Z -https://en.wikipedia.org/wiki/ISO_8601

$ python3
Python 3.7.2 (default, Feb 12 2019, 08:15:36)

>>> datetime.fromisoformat("2019-04-05T16:55:26Z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: '2019-04-05T16:55:26Z'

>>> datetime.fromisoformat("2019-04-05T16:55:26")
datetime.datetime(2019, 4, 5, 16, 55, 26)
rbpvctlc

rbpvctlc1#

我刚刚查看了Python 3文档,它并不打算解析任意的ISO 8601格式字符串:

注意事项:这不支持解析任意ISO 8601字符串-它仅用作datetime.isoformat()的逆运算。

dgjrabp2

dgjrabp22#

如果您已经知道API响应的格式,则可以用途:

from datetime import datetime
datetime.strptime("2022-04-07T08:53:42.06717+02:00", "%Y-%m-%dT%H:%M:%S.%f%z")

根据需要进行调整,例如,如果字符串不包含毫秒等。
否则,按照python官方文档的建议,使用dateutil包:https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.isoparse

b0zn9rqh

b0zn9rqh3#

现在,3.11支持正确的ISO格式(包括时区
https://docs.python.org/3.11/library/datetime.html#datetime.datetime.fromisoformat

xqkwcwgp

xqkwcwgp4#

很简单。去掉最后一个字母Z。

>>> from datetime import datetime; datetime.fromisoformat("2019-04-05T16:55:26")
datetime.datetime(2019, 4, 5, 16, 55, 26)

相关问题