Python: как получить сумму timedelta?
Eg. Я просто получил много timedelta объекта, и теперь я хочу, чтобы сумма. Что это!
Python: как получить сумму timedelta?
Eg. Я просто получил много timedelta объекта, и теперь я хочу, чтобы сумма. Что это!
Метод совмещения 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 и очень простое введение в
Чтобы добавить timedeltas, вы можете использовать встроенный оператор +
:
result = timedelta1 + timedelta2
Чтобы добавить много timedeltas, вы можете использовать сумму:
result = sum(timedeltas, datetime.timedelta())
Или уменьшить:
import operator
result = reduce(operator.add, timedeltas)
Поскольку это "просто работает", я предполагаю, что этот вопрос не содержит некоторых деталей...
Точно так же:
>>> import datetime
>>> datetime.timedelta(seconds=10) + datetime.timedelta(hours=5)
datetime.timedelta(0, 18010)
Я уверен, что под "суммой" он означает, что он хочет получить значение суммы в примитивном типе (например, целое число), а не в объекте 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
(Edit: Предполагая, что под "sum timedelta" вы подразумеваете "преобразовать timedelta в int seconds".)
Это очень неэффективно, но просто:
int((datetime.datetime.fromtimestamp(0) + myTimeDelta).strftime("%s"))
Это преобразует временную метку Unix (0
) в объект datetime, добавляет к ней свою дельту и затем преобразует ее обратно в Unix-время. Поскольку время Unix подсчитывает секунды, это количество секунд, которое было представлено timedelta.