2016-06-12 2 views
0

Я пытаюсь добавить время. в конечном итоге я создам функцию, передающую разные времена, и я хочу изменить время. По какой-то причине я не могу заставить timedelta сделать это.python TypeError добавляет время, используя timedelta

это мой код:

time1 = datetime.time(9,0) 
timedelta = datetime.timedelta(minutes=15) 
time2 = time1 + timedelta 

ошибка:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta' 

что я должен изменить?

+0

timedelta объекты могут быть добавлены только datetime.datetime объектов, а не datetime.time объектов. – Ben

+0

Думаю, вам нужен объект 'datetime.datetime', чтобы добавить timedelta –

+0

Итак, как я могу изменить объект datetime.time, а не вручную определять его каждый раз? – user1871528

ответ

0

Вы можете только добавить timedelta к datetime (как указывается Бен). Что вы можете сделать, сделайте объект datetime своим временем, а затем добавьте timedelta. Затем его можно вернуть обратно и объект time. Код, чтобы сделать это будет выглядеть следующим образом:

time1 = datetime.time(9,0) 
timedelta = datetime.timedelta(minutes=15) 
tmp_datetime = datetime.datetime.combine(datetime.date(1, 1, 1), time1) 
time2 = (tmp_datetime + timedelta).time() 
1

time Объекты не участвуют в арифметике по дизайну: нет убедительного ответа на вопрос «что произойдет, если результат переполнен? Оберните вокруг? Raise OverflowError?».

Вы можете реализовать свой собственный ответ путем объединения time объекта с date создать datetime, делать арифметику, а затем проверить результат. Например, если вы хотите «обтекать» поведение:

>>> time1 = datetime.time(9,0) 
>>> timedelta = datetime.timedelta(minutes=15) 
>>> time2 = (datetime.datetime.combine(datetime.date.today(), time1) + 
     timedelta).time() 
>>> time2 
datetime.time(9, 15) 

Или добавляя в 1000 раз ваша дельта, чтобы показать поведение переполнения:

>>> time2 = (datetime.datetime.combine(datetime.date.today(), time1) + 
     timedelta * 1000).time() 
>>> time2 
datetime.time(19, 0) 
Смежные вопросы