类型对象“datetime.datetime”没有属性“fromisoformat”

Aki*_*inn 26 python datetime python-import

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

from datetime import datetime
Run Code Online (Sandbox Code Playgroud)

和一段我调用的代码:

datetime.fromisoformat(duedate)
Run Code Online (Sandbox Code Playgroud)

遗憾的是,当我使用 Python 3.6 实例运行脚本时,控制台返回以下错误:

AttributeError: 类型对象“datetime.datetime”没有属性“fromisoformat”

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

datetime.py明确包含的类datetime和方法fromisoformat,但仍似乎无关联。我什至试图显式链接该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")
Run Code Online (Sandbox Code Playgroud)

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

aws*_*ice 37

这里的问题实际上fromisoformat在 3.7 之前的 Python 版本中不可用,您可以在此处的文档中清楚地看到这一点

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.
Run Code Online (Sandbox Code Playgroud)

  • doh...你知道旧版 python 3 实例的替代方案吗? (2认同)

Jes*_*nAg 12

您应该重构为这样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)
Run Code Online (Sandbox Code Playgroud)


小智 8

我有同样的问题,发现这个:

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)
Run Code Online (Sandbox Code Playgroud)

奇迹般有效。