python 3中timedelta的Datetime属性错误
我有一个包含字典列表的.txt文件,其中每个字典中的一个条目是“datetime.timedelta(天,秒)”格式的时间差。我试图找到所有时间差的平均值。但是,当我尝试使用这种格式的时间差做任何事情时,我会得到错误python 3中timedelta的Datetime属性错误,python,python-3.x,datetime,time,timedelta,Python,Python 3.x,Datetime,Time,Timedelta,我有一个包含字典列表的.txt文件,其中每个字典中的一个条目是“datetime.timedelta(天,秒)”格式的时间差。我试图找到所有时间差的平均值。但是,当我尝试使用这种格式的时间差做任何事情时,我会得到错误 AttributeError: type object 'datetime.datetime' has no attribute 'timedelta' 例如,下面给出了上述属性错误: from datetime import datetime, timedelta print(
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(天,秒)转换成timedelta(天,秒)的形式?最终,
datetime.timedelta(天,秒)
和timedelta(天,秒)
是同一回事
首先,有一个名为datetime
的模块,其中包含多个对象。如果执行dir(datetime)
,您将看到(至少在Python 2.7中):
然后,您将注意到,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
如果从datetime导入datetime,则没有导入要使用的datetime
模块,而是导入了datetime
对象。因此,对datetime
的所有引用都引用该对象,该对象没有timedelta
作为属性/方法,因此出现错误
记住第一个列表,以下各项之间没有区别:
from datetime import timedelta
my_time = timedelta(0, 9780)
及
它们是一样的。
from datetime import datetime
只意味着第二个datetime
屏蔽了模块,因此timedelta
出现错误。只需执行类似于import datetime as dt
的操作,然后执行dt.datetime.strftime()
(或任何您想要的datetime
)例如,dt.timedelta()
。
from datetime import timedelta
my_time = timedelta(0, 9780)
import datetime
my_time = datetime.timedelta(0, 9780)