Как сравнить время 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'))