2010-10-29 125 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