Как сложить datetime.time и datetime.timedelta
Подскажите пожалуйста как решить проблему?
Функция генератор принимает два аргумента (кортежи с 3 целыми числами) и должна возвращать первичное время time_start и на каждой следующей итерации возвращать предыдущий результат +1 секунда. При этом час окончания может быть меньше от начального.
Функцию я сделал:
import datetime
from datetime import time
def time_range(time_start: tuple, time_end: tuple) -> tuple:
start = time(time_start[0], time_start[1], time_start[2])
end = time(time_end[0], time_end[1], time_end[2])
step = datetime.timedelta(seconds=1)
while start <= end:
new_result = start + step
yield new_result
t_range = time_range(time_start=(10, 0, 0), time_end=(10, 0, 3))
print(next(t_range)) # == (10, 0, 0)
print(next(t_range)) # == (10, 0, 1)
print(next(t_range)) # == (10, 0, 2)
Но есть две проблемы, которые не могу решить:
- Выдает ошибку и не складывает datetime.time и datetime.timedelta (в документации почитал, но так и не понял как можно решить эту проблему).
- Не могу сообразить как возвращать первичное время time_start, а уже после этого возвращать время + 1 секунда?
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
по первому сделаем, как написано по ссылке
по второму вопросу: поменяйте местами yield и увеличение текущего времени
def time_range(time_start: tuple, time_end: tuple) -> tuple:
start = time(time_start[0], time_start[1], time_start[2])
end = time(time_end[0], time_end[1], time_end[2])
step = datetime.timedelta(seconds=1)
while start <= end:
yield start
start = (datetime.datetime.combine(datetime.date(1, 1, 1), start) + step).time()
t_range = time_range(time_start=(10, 0, 0), time_end=(10, 0, 3))
print(next(t_range)) # == (10, 0, 0)
print(next(t_range)) # == (10, 0, 1)
print(next(t_range)) # == (10, 0, 2)
выводит
10:00:00
10:00:01
10:00:02