2010-10-29 91 views
15

Python:如何获得timedelta的总和?如何获得Python中timedelta的总和?

例如,我刚刚获得了很多timedelta对象,现在我想要这个总和。而已!

+0

?????不明白这个问题。你有配方吗? – Phong 2010-10-29 07:27:03

+2

如果你有很多整数对象,你想做什么?你有什么尝试?当你尝试时发生了什么? – 2010-10-29 09:17:14

+1

我的猜测是,如果你有tds = [timedelta(),timedelta(),timedelta(),...],他想知道如何做sum(tds)。这是不可能的,因为sum类型从0开始,因此尝试执行0 + timedelta()。你当然可以用一些基本的循环duration = timedelta(0);对td tds:持续时间+ = td – orzel 2017-06-07 14:55:08

回答

8

日期时间组合方法允许您将时间与增量组合在一起

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模块文档,并在

26

要添加timedeltas你可以使用内置的运营商+

result = timedelta1 + timedelta2 

增添了不少timedeltas,你可以用和:

result = sum(timedeltas, datetime.timedelta()) 

或减少:

import operator 
result = reduce(operator.add, timedeltas) 
+0

嗯,我希望sum函数也能工作,但它在2.7.3上似乎不适合我。以下失败:''sum([datetime.timedelta(1),datetime.timedelta(0,14700)])''。 – pelson 2012-11-29 11:44:07

+4

@pelson:你错过了第二个参数。 'sum([datetime.timedelta(1),datetime.timedelta(0,14700)],datetime.timedelta())给出'datetime.timedelta(1,14700)'。 – 2012-11-29 12:09:40

+0

很酷。谢谢@Mark_Byers,我确实错过了! – pelson 2012-11-29 17:15:36

0

一个非常好的简单介绍由于这个“正常工作”,我认为这个问题缺乏一些细节...

就像这样:

>>> import datetime 
>>> datetime.timedelta(seconds=10) + datetime.timedelta(hours=5) 
datetime.timedelta(0, 18010) 
0

我敢肯定的是,“和”他的意思是他要的总和的基本类型(例如整数),而不是一个DateTime对象的值。

请注意,您始终可以使用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 
+0

这对于'days'组件的timedeltas不起作用:'datetime.timedelta(days = 3,hours = 5,seconds = 10).seconds - > 18010'。它应该是277210s((3 * 24 * 60 * 60)+(5 * 60 * 60)+ 10)。 – RobM 2011-01-18 16:48:08

+0

更好的解决方案:'time_sum.total_seconds()' (包括从天部件以及秒) http://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds – balleyne 2013-01-10 06:03:20

0

编辑:假设由 “总和timedelta” 你的意思是 “转换timedelta为int秒”。)

这是效率很低,但很简单:

int((datetime.datetime.fromtimestamp(0) + myTimeDelta).strftime("%s")) 

这将转换Unix时间戳(0)转换为日期时间对象,将其添加到它,然后转换回Unix时间。由于Unix时间计数秒,这是timedelta表示的秒数。

+0

这完全不相关的问题。 – SilentGhost 2011-01-18 16:55:19

+0

不一定。我分享了Goladus的解释 - user469652想要将timedelta的组件总和为单个基本类型,例如秒。当我发现这个问题时,这当然是我正在寻找的东西。 – RobM 2011-01-18 17:05:57

+1

更好的解决方案:'myTimeDelta.total_seconds()' http://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds – balleyne 2013-01-10 06:04:51