【问题标题】:Datetime attribute error for timedelta in python 3python 3中timedelta的日期时间属性错误
【发布时间】:2017-03-22 13:47:28
【问题描述】:

我有一个包含字典列表的 .txt 文件,其中每个字典中的一个条目是格式为“datetime.timedelta(days, seconds)”的时差。我试图找到所有时差的平均值. 但是,当我尝试使用这种格式的 timedelta 做任何事情时,我得到了错误

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

例如,下面给我上面的属性错误:

from datetime import datetime, timedelta
print(datetime.timedelta(0, 9780))

看来我可以通过以下格式解决问题:

from datetime import datetime, timedelta
print(timedelta(0, 9780))

我会得到结果:

2:43:00

那么我的问题是,有没有一种简单的方法让 python 能够将 datetime.timedelta(days, seconds) 转换为 timedelta(days, seconds) 的形式?

【问题讨论】:

  • 它们是一回事。 from datetime import datetime 只是意味着第二个datetime 屏蔽了模块,因此timedelta 出现错误。只需执行import datetime as dt 之类的操作,然后执行dt.datetime.strftime()(或您想要的任何datetime)和dt.timedelta() 之类的操作。

标签: python python-3.x datetime time timedelta


【解决方案1】:

最终,datetime.timedelta(days, seconds)timedelta(days, seconds) 是同一个东西。

首先,有一个名为datetime 的模块包含多个对象。如果你这样做dir(datetime),你会看到(至少在 Python 2.7 中):

['MAXYEAR',
 'MINYEAR',
 '__doc__',
 '__name__',
 '__package__',
 'date',
 'datetime',
 'datetime_CAPI',
 'time',
 'timedelta',
 'tzinfo']

然后,您会注意到datetime 模块 包含两个感兴趣的对象;一个datetime,一个叫timedelta。如果您随后执行dir(datetime.datetime),您会看到:

['__add__',
 '__class__',
 '__delattr__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__le__',
 '__lt__',
 '__ne__',
 '__new__',
 '__radd__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rsub__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 'astimezone',
 'combine',
 'ctime',
 'date',
 'day',
 'dst',
 'fromordinal',
 'fromtimestamp',
 'hour',
 'isocalendar',
 'isoformat',
 'isoweekday',
 'max',
 'microsecond',
 'min',
 'minute',
 'month',
 'now',
 'replace',
 'resolution',
 'second',
 'strftime',
 'strptime',
 'time',
 'timetuple',
 'timetz',
 'today',
 'toordinal',
 'tzinfo',
 'tzname',
 'utcfromtimestamp',
 'utcnow',
 'utcoffset',
 'utctimetuple',
 'weekday',
 'year']

该列表中没有timedelta

当您执行from datetime import datetime 时,您没有导入要使用的datetime 模块,而是导入了datetime 对象。因此,对datetime 的所有引用都引用了该对象,该对象没有timedelta 作为属性/方法,因此出现错误。

记住第一个列表,以下没有区别:

from datetime import timedelta
my_time = timedelta(0, 9780)

import datetime
my_time = datetime.timedelta(0, 9780)

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 2020-06-04
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多