Как сделать чтобы бот выдавал будущие ближайшие часы и минуты
Я создаю бота с расписанием автобусов. Хочу чтобы бот на запрос выдавал ближайшее время выезда автобуса. У меня есть список с расписанием, я сравниваю минуты и часы с текущем временем, но бот в конце просто выдает ближайшее время только прошлое, которое ближе к текущему, а не как я хочу будущее. Как мне сделать чтобы бот выдавал будущее ближайшее время например сейчас 10 : 50 как мне сделать чтобы бот выдал 11 : 26 а не 10: 48 ?
У меня есть вот такой код, но он не так выдает время как я и описал выше
`from datetime import datetime
time_list = ["10:48", "11:26", "12:01", "12:39"]
timeA = [datetime.strptime(temp, "%H:%M") for temp in time_list]
date_now = datetime.now()
now = date_now.strftime("%H:%M")
timeB = datetime.strptime(now, "%H:%M")
time_diffs = [abs(temp - timeB) for temp in timeA]
closest_time = time_list[time_diffs.index(min(time_diffs))]
print(closest_time)
`
Ответы (2 шт):
Можно перебрать значения времени из списка, расположенные по возрастанию, и забрать первое время, которое будет больше, чем текущее.
from datetime import datetime
time_list = ["10:48", "11:26", "12:01", "12:39"]
timeA = [datetime.strptime(temp, "%H:%M").time() for temp in time_list]
now = datetime.strptime("10:50", "%H:%M").time() # тестовое время
for time in timeA:
if now < time:
print(f'Ближайшее время после {now} - {time}')
break
else:
print('Нет подходящего времени')
Ближайшее время после 10:50:00 - 11:26:00
Если список большой и сортированный:
import bisect
ind = bisect.bisect_right(timeA, timeB)
if ind < len(time_list):
closest_time = time_list[ind]
print(closest_time)