Я выполняю некоторые запланированные задачи в Python.Мастер-программа работает 24/7 и выполняет отдельные задачи аналогично cron.Мне нужно определить, нужно ли запускать задачу снова из времен.
В этом случае у меня будет время последнего запуска задачи, текущее время (обе метки времени Unix, полученные с помощью * 1003).* и легко конвертируется в datetime.datetime
объекты), а также запланированное время (например, каждую 15-ую минуту каждый час, например 0:15
, 1:15
, ..., 23:15
).Я хочу определить, находится ли какое-либо из запланированных моментов времени между последним временем выполнения и текущим временем, вероятно, как логическое значение.Гарантируется, что запланированное время всегда является «временем» (например, «2:00») и не включает «дату» (например, 1-е число любого месяца или любого понедельника).
Пример данных:
import datetime
scheduled = [datetime.time(h, m) for h, m in [(0, 15), (6, 15), (12, 15), (18, 15)]]
previous = datetime.datetime(2018, 11, 30, 5)
truthy = datetime.datetime(2018, 11, 30, 7)
falsey = datetime.datetime(2018, 11, 30, 6)
# some_method() is what I want
assert some_method(scheduled, previous, falsey) is False
assert some_method(scheduled, previous, truthy) is True
И вот некоторые особые случаи, которые я также хотел бы охватить
scheduled = [datetime.time(1, 0)] # 1:00 AM
previous = datetime.datetime(2018, 11, 30, 23)
truthy = datetime.datetime(2018, 12, 1, 2, 0)
falsey = datetime.datetime(2018, 12, 1, 0, 30)
assert some_method(scheduled, previous, falsey) is False
assert some_method(scheduled, previous, truthy) is True
Приведенный выше пример должен быть True
, потому что запланированное время «1 AM» находится между «11 PM».30 ноября "и" 2 часа ночи 1 декабря ".Я не могу сравнивать время напрямую, потому что «1:00» не находится между «2:00» и «11:00» в один и тот же день, а между двумя значениями времени в разные дни.