web-dev-qa-db-ja.com

Pythonでtimedeltaの合計を取得するにはどうすればよいですか?

Python:timedeltaの合計を取得する方法は?

例えば。たくさんのtimedeltaオブジェクトを取得したので、合計が必要になります。それでおしまい!

21
user469652

日時結合メソッドを使用すると、時間をデルタと結合できます

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)
>>> 

日時モジュールのドキュメントと非常に優れた簡単な紹介をで読むことができます

9
pyfunc

タイムデルタを追加するには、組み込みの演算子+を使用できます。

result = timedelta1 + timedelta2

多くのタイムデルタを追加するには、sumを使用できます。

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

または削減:

import operator
result = reduce(operator.add, timedeltas)
41
Mark Byers

編集:「sumtimedelta」とは「timedeltaをint秒に変換する」ことを意味すると仮定します。)

これは非常に非効率的ですが、簡単です。

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

これにより、Unixタイムスタンプ(0)をdatetimeオブジェクトに変換し、それにデルタを追加してから、Unix時間に変換し直します。 Unix時間は秒をカウントするため、これはタイムデルタが表す秒数です。

0
RobM

「合計」とは、日時オブジェクトではなく、プリミティブ型(整数など)の合計値が必要であることを意味していると確信しています。

いつでも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
Doug F

これは「うまくいく」ので、この質問には詳細が欠けていると思います...

ちょうどこのような:

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