类型对象 '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
我有一个包含以下导入的脚本:
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