28

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

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

4

6 に答える 6

54

timedelta を追加するには、組み込みの operator を使用できます+

result = timedelta1 + timedelta2

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

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

または減らす:

import operator
result = reduce(operator.add, timedeltas)
于 2010-10-29T07:27:36.500 に答える
14

datetime 結合メソッドを使用すると、時間をデルタと組み合わせることができます

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 モジュールのドキュメントと非常に優れた簡単な紹介を読むことができます

于 2010-10-29T07:28:04.113 に答える
0

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

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

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

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

于 2011-01-18T16:42:40.620 に答える
0

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

ちょうどこのような:

>>> import datetime
>>> datetime.timedelta(seconds=10) + datetime.timedelta(hours=5)
datetime.timedelta(0, 18010)
于 2010-10-29T07:28:50.987 に答える
0

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

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
于 2010-10-29T11:32:56.687 に答える