Как получить сумму таймделта в Python? - PullRequest
16 голосов
/ 29 октября 2010

Python: Как получить сумму timedelta?

Например. Я только что получил много объекта timedelta, и теперь я хочу получить сумму. Вот и все!

Ответы [ 5 ]

33 голосов
/ 29 октября 2010

Для добавления timedeltas вы можете использовать встроенный оператор +:

result = timedelta1 + timedelta2

Чтобы добавить много таймделт, вы можете использовать сумму:

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

Или уменьшить:

import operator
result = reduce(operator.add, timedeltas)
9 голосов
/ 29 октября 2010

метод комбинирования даты и времени позволяет комбинировать время с дельтой

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 и очень хорошее простое введение в

0 голосов
/ 18 января 2011

( Редактировать: Предполагая, что под "суммой timedelta" вы подразумеваете "преобразовать timedelta в int секунды".)

Это очень неэффективно, но просто:

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

Это преобразует метку времени Unix (0) в объект datetime, добавляет к нему вашу дельту и затем преобразует обратно во время Unix. Поскольку время Unix считает секунды, это количество секунд, которое представляла ваша временная дельта.

0 голосов
/ 29 октября 2010

Я почти уверен, что под "суммой" он подразумевает, что ему нужно значение суммы в примитивном типе (например, целое число), а не в объекте 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 голосов
/ 29 октября 2010

Поскольку это "просто работает", я предполагаю, что в этом вопросе не хватает деталей ...

Точно так:

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