给定当前时间和 cron 规范,计算事件下一次运行时间的有效方法是什么?
我正在寻找“每分钟循环检查它是否符合规范”以外的东西。
规格示例可能是:
- 每月 1 日和 15 日 15:01
- 每小时 10、20、30、40、50 分钟
Python 代码会很可爱,但伪代码或高级描述也会受到赞赏。
[更新] 假设规范已经被解析并且是某种合理的格式。
只是看着它,我认为你需要:
我不知道如何同时处理星期几和星期几;我确信有办法,但另一方面,我认为我从未见过真正指定两者的规范。我认为为任何一个编写处理程序并在收到两者时抛出错误就足够了。
编辑:显然,如果同时指定了星期几和月份中的日期,则应该同时触发两者- 即,如果规则是“15 号,星期三”,它将在每 15 号和每个星期三触发。
croniter 包可以满足您的要求:
import croniter
import datetime
now = datetime.datetime.now()
sched = '1 15 1,15 * *' # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)
for i in range(4):
nextdate = cron.get_next(datetime.datetime)
print nextdate
印刷
2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00
虽然如果它被写成一个实际的迭代器会很好。也许我有我的下一个项目;-)