@AlikhanPython
Учу программирование на Python.

Как сделать что-то если наступил следующий день/неделя/месяц/год на Python?

Нужно сделать какое-либо действие, если наступил следующий день/неделя/месяц/год. Как можно реализовать это на пайтоне?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
А в чем проблема?
Для начла получи точные дату и время необходимого события. Для этого прибавляй один день\неделю\месяц\год к текущей дате. Затем нужно вернуться к началу этого очередного интервала (дня\недели\месяца\года). В случае дня нужно отбосить время. В случае недели, нужно отбросить время и найти ближайший понедельник слева - то есть вычесть из даты номер дня недели. В случае месяца, нужно вычесть из даты номер дня месяца, в случае года - номер дня года соответственно.

Получившиеся дата-время события теперь нужно не пропустить.
Просто время от времени проверяем дату-время и если она больше или равна требуемому, генерируем ивент.
Можно вычесть текущую дату-время из даты-времени события, если этот промежуток меньше порогового, то спать ровно этот промежуток, если больше, то спать пороговое время и следом повторть проверку.

Високосные секунды можно не учитывать, если вы не работаете с интервалами меньше минуты.
Перевод часов можно не учитывать, если не работаете с интервалами меньше суток. Иначе вам придётся оределить как должна вести себя программа при этих переводах.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
добавь к текущей дате сутки (затем возьми и получившейся даты день месяца и сравни с текущим днем месяца, если они равны, то добавь еще одну секунду, это для обслуживания лишних секунд), затем создай новую дату из дня месяца и года получившейся переменной, получишь время требуемого события.

Дальше, если хватит простого слипа, чтобы выполнить что-либо к этому моменту, вычти из этой переменной ткущее время и получишь сколько времени нужно ждать.

Не советую использовать один большой слип, надо бы такой протестировать на граничных ситуациях (в момент корректировки времени на машине от сервера времени), а раздели интервал на несколько, чем больше время ожидания, тем больше должен быть слип, а когда останется несколько секунд, то слипы можно сделать короткими (чем ближе к нужному моменту тем короче ожидание, это определит погрешность срабатывания)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы