Python:如何获得 timedelta 的总和?
例如。我刚刚得到了很多 timedelta 对象,现在我想要总和。就是这样!
要添加 timedeltas,您可以使用内置运算符+
:
result = timedelta1 + timedelta2
要添加很多时间增量,您可以使用 sum:
result = sum(timedeltas, datetime.timedelta())
或减少:
import operator
result = reduce(operator.add, timedeltas)
datetime combine 方法允许您将时间与增量相结合
datetime.combine(date.today(), time()) + timedelta(hours=2)
timedelta 可以使用通常的“+”运算符组合
>>> timedelta(hours=3)
datetime.timedelta(0, 10800)
>>> timedelta(hours=2)
datetime.timedelta(0, 7200)
>>>
>>> timedelta(hours=3) + timedelta(hours=2)
datetime.timedelta(0, 18000)
>>>
您可以阅读 datetime 模块文档和一个非常好的简单介绍
由于这“有效”,我认为这个问题缺乏一些细节......
像这样:
>>> import datetime
>>> datetime.timedelta(seconds=10) + datetime.timedelta(hours=5)
datetime.timedelta(0, 18010)
我很确定“总和”是指他想要原始类型(例如整数)而不是日期时间对象的总和值。
请注意,您始终可以使用该dir
函数来反映对象,返回其方法和属性的列表。
>>> import datetime
>>> time_sum=datetime.timedelta(seconds=10) + datetime.timedelta(hours=5)
>>> time_sum
datetime.timedelta(0, 18010)
>>> dir(time_sum)
['__abs__', '__add__', '__class__', '__delattr__', '__div__', '__doc__', '__eq__', '__floordiv__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__mul__', '__ne__', '__neg__', '__new__', '__nonzero__', '__pos__', '__radd__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmul__', '__rsub__', '__setattr__', '__str__', '__sub__', 'days', 'max', 'microseconds', 'min', 'resolution', 'seconds']
所以在这种情况下,看起来我们可能需要几秒钟。
>>> time_sum.seconds
18010
在我看来是正确的:
>>> 5*60*60 + 10
18010
(编辑:假设“sum timedelta”是指“将 timedelta 转换为 int 秒”。)
这是非常低效的,但很简单:
int((datetime.datetime.fromtimestamp(0) + myTimeDelta).strftime("%s"))
这会将 Unix 时间戳 ( 0
) 转换为 datetime 对象,将增量添加到其中,然后转换回 Unix 时间。由于 Unix 时间计算秒数,因此这是您的 timedelta 表示的秒数。
如果您有 timedelta 对象列表,您可以尝试:
datetime.timedelta(seconds=sum(td.total_seconds() for td in list_of_deltas))