- Каждый день имеет фиксированное временное окно: с 9:00 до 13:00 (в местном часовом поясе пользователя).
- Если текущее время выходит за пределы этого окна:
До 9 :00 утра: настроить на 9:00 утра + интервал. - После 13:00: расписание на следующий день в 9:00 + интервал.
[*]Если планирование превышает окно третьего дня (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