Задать вопрос
@Defbot

Как передать дату из обработчика состояний в другую функцию?

Создаю телеграм бота для салона красоты. Бот принимает от пользователя дату и должен проверить наличие свободного времени у мастера. При создании списка свободных часов возникает ошибка формата даты - времени.
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
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kalsc12345
Неизвестный человек.
# получаем свободные часы
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.combine(date, datetime.min.time())
            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

А так если?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы