Как сравнить время Python

def _is_work_time(self, start, end):
    now_str = datetime.now().strftime('%H:%M')
    return start <= now_str <= end

Функция принимает 2 аргумента в формате H:M.

Например: передаем start=8:30, end=4:30. Задача такая, нужно реализовать чтобы функция возвращала true, если время сейчас от 8:30 до 4:30(след дня), или до 23:30(при end=23:30)(того же дня, что и start), а в остальных случаях false.


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

Автор решения: Andy Pavlov

Update: Уточнил функцию. Если не знать начальную дату, то мы имеем задачу о попадании в интервал времени start < end, либо непопадании в него, когда start >= end.

from datetime import datetime, time, timedelta


def is_work_time(start_time: str, end_time: str):
    now = datetime.now().time()
    start = time.fromisoformat(start_time)
    end = time.fromisoformat(end_time)
    return any([now <= end, now >= start]) if not start < end else (start <= now <= end)


print(is_work_time('08:30', '23:30'))
print(is_work_time('08:30', '04:30'))

Вариант с известной датой выхода на работу:

def is_work_datetime(start_date: str, start_time: str, end_time: str):
    now = datetime.now()
    date_ = date.fromisoformat(start_date)
    start = time.fromisoformat(start_time)
    end = time.fromisoformat(end_time)
    if start < end:
        start = datetime.combine(date_, time.fromisoformat(start_time))
        end = datetime.combine(date_, time.fromisoformat(end_time))
    else:
        start = datetime.combine(date_, time.fromisoformat(start_time))
        end = datetime.combine(date_ + timedelta(days=1), time.fromisoformat(end_time))
    return start <= now <= end


print(is_work_datetime('2021-07-01', '08:30', '23:30'))
print(is_work_datetime('2021-06-30', '08:30', '04:30'))
→ Ссылка