datetime.datetime对象之和出现错误 TypeError: 不支持的操作数类型:'datetime.datetime' 和 'datetime.datetime'

8

我正在尝试使用以下方法对datetime.datetime对象的列表进行求和:

from datetime import datetime, timedelta
d= [datetime.datetime(2013, 5, 1, 9, 31, 24), datetime.datetime(2013, 6, 11, 17, 22, 18), datetime.datetime(2013, 4, 3, 16, 6, 59)]

sum_d = sum(d, timedelta())

我遇到了以下错误:

TypeError: 不支持的操作类型:+:'datetime.datetime' 和 'datetime.datetime'

你有什么想法,我是做错了什么还是如何对这个列表求和?

我想要得到这个列表的平均值,我在考虑:

 d_avg = sum(d, timedelta()) / len(d)

谢谢!

2个回答

16

这是因为时间无法相加。您可以添加时间差,但不能直接相加时间。

我的意思是,1995年8月3日加上454年6月19日是什么意思?这毫无意义。您可以将其与公元0年的距离相加,但这与直接相加日期是不同的。

您希望从这个计算中得到什么?


如果您希望找到平均值(为什么?),您将需要使用更间接的方法。

import datetime

d = [datetime.datetime(2013, 5, 1, 9, 31, 24), datetime.datetime(2013, 6, 11, 17, 22, 18), datetime.datetime(2013, 4, 3, 16, 6, 59)]

d[0] + sum((d_i-d[0] for d_i in d), datetime.timedelta(0)) / len(d)
#>>> datetime.datetime(2013, 5, 5, 22, 20, 13, 666667)

这会找到从 d[0] 开始的偏移量总和,即那些偏移量,然后再将该偏移量添加回去。


这些日期的平均值,最好能够以timedelta对象的形式得到。 - mongotop

3

您不能对此列表进行求和:正如错误消息所说,datetime.datetime对象不能相加。例如,您期望datetime.datetime(2013, 5, 1, 9, 31, 24), datetime.datetime(2013, 6, 11, 17, 22, 18)返回什么呢?Python通常不会做完全没有意义的事情 ;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接