Python:timedeltaの合計を取得する方法は?
例えば。たくさんのtimedeltaオブジェクトを取得したので、合計が必要になります。それでおしまい!
日時結合メソッドを使用すると、時間をデルタと結合できます
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)
>>>
日時モジュールのドキュメントと非常に優れた簡単な紹介をで読むことができます
タイムデルタを追加するには、組み込みの演算子+
を使用できます。
result = timedelta1 + timedelta2
多くのタイムデルタを追加するには、sumを使用できます。
result = sum(timedeltas, datetime.timedelta())
または削減:
import operator
result = reduce(operator.add, timedeltas)
(編集:「sumtimedelta」とは「timedeltaをint秒に変換する」ことを意味すると仮定します。)
これは非常に非効率的ですが、簡単です。
int((datetime.datetime.fromtimestamp(0) + myTimeDelta).strftime("%s"))
これにより、Unixタイムスタンプ(0
)をdatetimeオブジェクトに変換し、それにデルタを追加してから、Unix時間に変換し直します。 Unix時間は秒をカウントするため、これはタイムデルタが表す秒数です。
「合計」とは、日時オブジェクトではなく、プリミティブ型(整数など)の合計値が必要であることを意味していると確信しています。
いつでも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
これは「うまくいく」ので、この質問には詳細が欠けていると思います...
ちょうどこのような:
>>> import datetime
>>> datetime.timedelta(seconds=10) + datetime.timedelta(hours=5)
datetime.timedelta(0, 18010)