Проверьте модуль dateutils.relativedelta.
Вы можете легко манипулировать объектами даты и времени, устанавливать значения часов, минут и секунд и т. Д. Или использовать их для изменения даты и времени на требуемые часы / минуты / секунды и т. Д.
from datetime import datetime
from dateutil.relativedelta import relativedelta
my_original_datetime = datetime.now()
minutes_offset = 30
opening_time = datetime.now() + relativedelta(minute=0, seconds=0, microsecond=0)
closing_time = datetime.now() + relativedelta(hour=17, minute=0, seconds=0, microsecond=0)
delivery_slot_start = opening_time
delivery_slot_end = delivery_slot_start + relativedelta(minutes=minutes_offset)
available_delivery_times = [(delivery_slot_start.strftime('%H:%M'), delivery_slot_end.strftime('%H:%M'))]
while delivery_slot_end <= closing_time:
delivery_slot_start = delivery_slot_end
delivery_slot_end += relativedelta(minutes=minutes_offset)
available_delivery_times.append(
(delivery_slot_start.strftime('%H:%M'),
delivery_slot_end.strftime('%H:%M'))
)
print(tuple(available_delivery_times))