Создаю телеграм бота для салона красоты. Бот принимает от пользователя дату и должен проверить наличие свободного времени у мастера. При создании списка свободных часов возникает ошибка формата даты - времени.
ValueError: time data '2' does not match format '%d.%m.%y %H.%M'
Пользователь вводит дату в формате
%d.%m.%y
а список свободных часов нужно сформировать на основании этой даты. Помогите исправить.
@dp.message_handler(state=AppointmentForm.date)
async def process_date(message: types.Message, state: FSMContext):
date_str = message.text
try:
# Проверяем корректность даты
date = datetime.strptime(date_str, '%d.%m.%y')
if date < datetime.now():
raise ValueError
except ValueError:
await message.answer("Введте дату в формате ДД.ММ.ГГ (например, 27.03.23)")
else:
async with state.proxy() as data:
data['date'] = date
busy_times = await get_busy_time(data['date'])
await AppointmentForm.next()
await message.answer("Выберите мастера.", reply_markup=masters_kb)
# получаем занятые часы
async def get_busy_time(date):
# текущее время
now = datetime.now(tz=tz)
# если указаная дата - текущая дата, то занятые - часы, которые уже прошли
if date.date() == now.date():
busy_times = [datetime.now(tz=tz) - timedelta(minutes=1)]
else:
busy_times = []
return busy_times
# получаем свободные часы
def get_free_time(date):
free_times = []
# Задать время работы
work_hours = {'start': 9, 'end': 18}
# получаем список занятый часов
busy_times = get_busy_time(date)
# генерируем список свободных часов
for hour in range(work_hours['start'], work_hours['end']):
for minute in [0, 30]:
now = datetime.strptime(date, '%d.%m.%y %H:%M')
time = datetime(now.year, now.month, now.day, hour, minute, tzinfo=tz)
if time not in busy_times:
free_times.append(time)
return free_times