为什么datetime.now().isoformat()根据time.fromisoformat()返回一个无效的is



运行Python 3.8.10,今天遇到这个:

from datetime import datetime, time
time.fromisoformat(datetime.now().isoformat())

结果:

Traceback(最近一次调用):ValueError: Invalid isoformat string: '2021-09-02T17:16:49.330690'

为什么是由datetime创建的isoformat字符串。Datetime模块被认为无效。时间模块?

您使用的是time.fromisoformat,它只处理时间字符串。要解析完整的日期时间,使用datetime.fromisoformat:

>>> from datetime import datetime, time
# Bad
>>> time.fromisoformat(datetime.now().isoformat())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid isoformat string: '2021-09-02T17:31:25.857666'
# Good
>>> datetime.fromisoformat(datetime.now().isoformat())
datetime.datetime(2021, 9, 2, 17, 31, 43, 685120)

因为datetime.now给你一个日期和一个时间,而time.fromisoformat只需要一个时间字符串。

来自time.fromisoformat文档:

谨慎

不支持解析任意ISO 8601字符串。它只是作为time.isoformat()的逆操作。

再试一次

datetime.now().time()代替。

最新更新