Каждый день имеет фиксированное временное окно: с 9:00 до 13:00 (в местный часовой пояс пользователя).
Если текущее время выходит за пределы этого окна:
До 9:00: настройте на 9:00 + интервал.
После 13:00: Запланируйте следующий день на 9:00 + интервал.
Система планирования должна работать только в течение 3 дней подряд.
Если планирование превышает окно третьего дня (13:00), оно должно быть остановлено или ограничение в 13:00 третьего дня.
Мне нужно рассчитать следующее запланированное время в формате UTC, но все сравнения должны выполняться в местном часовом поясе пользователя. Я реализовал функцию, но логика перехода к окну следующего дня и остановки на третьем дне работает неправильно.
Вот суть моей текущей реализации:
Код: Выделить всё
def get_next_scheduled_time(country, interval_seconds=20):
tz_name = time_zone_mapping.get(country, "UTC")
timezone = pytz.timezone(tz_name)
now_local = datetime.now(pytz.utc).astimezone(timezone)
base_time = timezone.localize(datetime(now_local.year, now_local.month, now_local.day, 9, 0, 0))
end_time = timezone.localize(datetime(now_local.year, now_local.month, now_local.day, 13, 0, 0))
staggered_time = now_local + timedelta(seconds=interval_seconds)
if staggered_time < base_time:
staggered_time = base_time + timedelta(seconds=interval_seconds)
elif base_time max_scheduled_time:
staggered_time = timezone.localize(max_scheduled_time).astimezone(timezone)
return staggered_time.astimezone(pytz.utc).strftime("%Y-%m-%dT%H:%M:%S+00:00")
После перехода он иногда пропускает или перекрывает заданное временное окно.
Я не уверен, следует ли мне использовать timedelta(days=...) или timedelta(hours=...) для смены дней, чтобы обеспечить точный контроль.
Желаемый результат:
Если текущее время находится за пределами окна в День 1, запланируйте его на 9:00 утра Дня 2.
Если окно Дня 3 превышено, ограничьте планирование 13:00 Дня 3.
Все планирование вычисления должны учитывать местный часовой пояс, но выходные данные должны быть в формате UTC.
Как я могу исправить эту логику, чтобы обеспечить правильные ежедневные переходы и строгое соблюдение времени окна?
Подробнее здесь: https://stackoverflow.com/questions/793 ... owing-rule