类型对象 'datetime.datetime' 没有属性 'fromisoformat'

type object 'datetime.datetime' has no attribute 'fromisoformat'

我有一个包含以下导入的脚本:

from datetime import datetime

和我调用的一段代码:

datetime.fromisoformat(duedate)

可悲的是,当我运行用Python3.6实例的脚本时,控制台returns出现如下错误:

AttributeError: type object 'datetime.datetime' has no attribute 'fromisoformat'

我尝试从两个 anaconda 实例(3.7 和 3.8)中 运行 它,它运行良好且流畅。 我认为存在导入问题,所以我尝试将 datetime.py 从 anaconda/Lib 复制到脚本目录,但没有成功。

datetime.py 显然包含 class datetime 和方法 fromisoformat 但它似乎仍未 link 编辑。我什至尝试显式 link datetime.py 文件,但出现相同的错误:

parent_dir = os.path.abspath(os.path.dirname(__file__))
vendor_dir = os.path.join(parent_dir, 'libs')
sys.path.append(vendor_dir+os.path.sep+"datetime.py")

你能帮帮我吗?我的想法结束了...

你不应该使用 from datetime import datetime 而应该使用 import datetime,你只是混淆了模块的命名。 现在你可以使用 datetime.fromisoformat(duedate).

这里的问题实际上是 fromisoformat 在早于 3.7 的 Python 版本中不可用,您可以在文档 here.

中清楚地看到这一点
Return a date corresponding to a date_string given in the format YYYY-MM-DD:
>>>

>>> from datetime import date
>>> date.fromisoformat('2019-12-04')
datetime.date(2019, 12, 4)

This is the inverse of date.isoformat(). It only supports the format YYYY-MM-DD.

New in version 3.7.

我遇到了同样的问题并发现了这个:

https://pypi.org/project/backports-datetime-fromisoformat/

>>> from datetime import date, datetime, time
>>> from backports.datetime_fromisoformat import MonkeyPatch
>>> MonkeyPatch.patch_fromisoformat()

>>> datetime.fromisoformat("2014-01-09T21:48:00-05:30")
datetime.datetime(2014, 1, 9, 21, 48, tzinfo=-05:30)

>>> date.fromisoformat("2014-01-09")
datetime.date(2014, 1, 9)

>>> time.fromisoformat("21:48:00-05:30")
datetime.time(21, 48, tzinfo=-05:30)

很有魅力。

您应该像这样重构 datetime.fromisoformat('2021-08-12') 以使用 datetime.strptime

In [1]: from datetime import datetime                                                                                                                                                          

In [2]: datetime.strptime("2021-08-08", "%Y-%m-%d")                                                                                                                                           
Out[2]: datetime.datetime(2021, 8, 8, 0, 0)

Python 3.6 版及更早版本没有 fromisoformat() 方法 - 如其他文档中所述 - both datetime.fromisoformat (docs) and date.fromisoformat (docs) 不可用。

您可以使用我编写的这段代码在 Python 3.6 中实现它。我不想为我几乎不使用的功能安装额外的依赖项 - 在我的例子中,我只在测试中使用它。

Python3.6及以下

from datetime import datetime

time_expected = datetime.now()
time_actual = datetime.strptime(time_actual.isoformat(), "%Y-%m-%dT%H:%M:%S.%f")
assert time_actual == time_expected

Python3.7+

from datetime import datetime

time_expected = datetime.now()
time_actual = datetime.fromisoformat(time_expected.isoformat())
assert time_actual == time_expected