Преобразовать float в двоеточие или datatime

Этот вариант кода используется в моем Телеграм-боте, для перебора расписания в реальном времени и выдаче ближайших маршруток. Все работает, но меня смущает и режет глаз, что в выдаче формат 17.1, а нужно 17:10 или 9:00

PS прошу помощи, спасибо! может это и дом из костылей, но я учусь всего три недели, не судите строго...

    d1 = datetime.datetime.today().strftime('%H.%M')  # Это переменная времени
    if float(d1) < 17.10:
        marsh17 = 6.1, 6.2, 6.4, 7.1, 9.0, 9.2, 9.3,16.0, 16.1, 17.10, 42, 43#  42 43 для того чтобы 
                                                                            #небыло ошибки при 17.10
        d1 = float(d1)  # подставить для проверки из списка
        rasp = []
        for i in marsh17:
            if float(i) >= d1:
                rasp.append(str(i))

        print(f'Два ближайших! ➔ {rasp[0]} ➔ {rasp[1]}')
    else:
        print('Маршрутки кончились ?')


    marsh17 = ('6:10', '6:20', '6:40', '7:10', '7:20', '7:30', '7:40', '8:10', '8:20', '8:40', '9:00', '9:20', '9:30', '10:00', '10:10', '10:20', '10:40', '11:00', '11:20', '11:30', '11:45', '12:20', '12:40', '12:50', '13:10', '13:25', '13:35', '14:00', '14:25', '14:35', '14:45', '15:10', '15:30', '15:5', '16:00', '16:10', '17:10')
    result = [i for i in marsh17 if i >= '11:05']
    if not result:
        print('Маршрутки кончились ?')
    elif len(result) == 1:
        print(f'Еще один рейс в {result[0]}!')
    else:
        print(f'Два ближайших рейса ➔ {result[0]} ➔ {result[1]}')


    

Ответы (2 шт):

Автор решения: alex
from datetime import datetime
from datetime import timedelta


def main():
    d1 = datetime.today()  # Это переменная времени
    current = timedelta(hours=d1.hour, minutes=d1.minute)
    seventeen_ten = timedelta(hours=17, minutes=10)
    if current < seventeen_ten:
        marsh17 = (timedelta(hours=h, minutes=m) for h, m in ((6, 10), (6, 20), (6, 40), (7, 10), (9, 0), (9,20), (9, 30), (16, 0), (16, 1), (17, 10)))
        rasp = []
        for i in marsh17:
            if i >= current:
                rasp.append(str(i))

        print(f'Два ближайших! ➔ {rasp[0]} ➔ {rasp[1]}')
    else:
        print('Маршрутки кончились ?')


if __name__ == '__main__':
    main()

работаем только с timedelta. рассписание можно даже в файл положить и построчно читать его.

можно использовать только time

from datetime import datetime
from datetime import time


def main():
    d1 = datetime.time(datetime.now())  # Это переменная времени
    seventeen_ten = time(17, 10)
    if d1 < seventeen_ten:
        marsh17 = (time(h, m) for h, m in ((6, 10), (6, 20), (6, 40), (7, 10), (9, 0), (9,20), (9, 30), (16, 0), (16, 1), (17, 10)))
        rasp = []
        for i in marsh17:
            if i >= d1:
                rasp.append(str(i))

        print(f'Два ближайших! ➔ {rasp[0]} ➔ {rasp[1]}')
    else:
        print('Маршрутки кончились ?')


if __name__ == '__main__':
    main()

Я имел ввиду что мы можем положить рядом файл с именем marsh17, в который построчно записать рассписание маршрута

6 10
6 10
6 20
6 40
7 10
9 0
9 20
9 30
16 0
16 10
17 10

а в коде прочитать его и сфромировать рассписание

from datetime import datetime
from datetime import timedelta


def nextex(iter):
    try:
        return next(iter)
    except StopIteration:
        return "Nothing"


def load_marsh(nomber):
    source_path = f"marsh{nomber}"
    with open(source_path, "r") as f:
        source_lines = (x.strip().split() for x in f if x.strip())
        marsh = tuple(timedelta(hours=int(h), minutes=int(m)) for h, m in source_lines)
    return marsh


def main():
    current = datetime.now()
    current = timedelta(hours=current.hour, minutes=current.minute)
    # current = timedelta(hours=17, minutes=10)
    seventeen_ten = timedelta(hours=17, minutes=10)
    if current <= seventeen_ten:
        marsh17 = load_marsh(17)
        rasp = filter(lambda x: x >= current, marsh17)  # фильтруем все что меньше текущего времени
        print(f'Два ближайших! ➔ {nextex(rasp)} ➔ {nextex(rasp)}')
    else:
        print('Маршрутки кончились ?')


if __name__ == '__main__':
    main()

→ Ссылка
Автор решения: Jack_oS

Или, как вариант, работайте со строкой и сравнивайте строки:

from datetime import datetime

shedule_17 = ('06:10', '06:20', '06:40', '07:10', '09:00', '09:20', '09:30', '16:00', '16:10', '17:10')

result = [i for i in shedule_17 if i >= str(datetime.now().time())]

в result будет список оставшихся на сегодня рейсов,
например, при .now() == 16:09:

>>> result
['16:10', '17:10']

или при .now() == 9:10

>>> result
['09:20', '09:30', '16:00', '16:10', '17:10']

тогда два ближайших:

>>> result[:2]
['09:20', '09:30']

ну, и для вашего случая:

if not result:
    print('Маршрутки кончились ?')
elif len(result) == 1:
    print(f'Еще один рейс в {result[0]}!')
else:
    print(f'Два ближайших рейса ➔ {result[0]} ➔ {result[1]}')
→ Ссылка