19

给定当前时间和 cron 规范,计算事件下一次运行时间的有效方法是什么?

我正在寻找“每分钟循环检查它是否符合规范”以外的东西。

规格示例可能是:

  • 每月 1 日和 15 日 15:01
  • 每小时 10、20、30、40、50 分钟

Python 代码会很可爱,但伪代码或高级描述也会受到赞赏。

[更新] 假设规范已经被解析并且是某种合理的格式。

4

1 回答 1

27

只是看着它,我认为你需要:

  • 将 chron 规范解析为五个数组,其中包含每个字段的可接受值;
  • 将“现在”解析为每个字段的值;
  • 按分钟、小时、{day-of-month OR day-of-week}、month-of 的顺序:找到匹配或超过当前值的最低数组值,校正进位。

我不知道如何同时处理星期几和星期几;我确信有办法,但另一方面,我认为我从未见过真正指定两者的规范。我认为为任何一个编写处理程序并在收到两者时抛出错误就足够了。

编辑:显然,如果同时指定了星期几和月份中的日期,则应该同时触发两者- 即,如果规则是“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

虽然如果它被写成一个实际的迭代器会很好。也许我有我的下一个项目;-)

于 2011-01-06T02:13:14.360 回答