根据 cron 规范计算下一个计划时间

2024-06-26

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

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

规格示例可能是:

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

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

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


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

  • 将 chron 规范解析为五个数组,其中每个字段包含可接受的值;
  • 将“now”解析为每个字段的值;
  • 按分钟、小时、{某月某日或某周}、某年某月的顺序:查找匹配或超过当前值的最低数组值,并纠正进位。

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

Edit:显然,如果同时指定了星期几和月份,则应该触发both- 即,如果规则是“15 日,星期三”,它将在每 15 日触发and每个星期三。

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

prints

2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00

尽管如果将其编写为实际的迭代器就好了。也许我已经有了下一个项目;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 cron 规范计算下一个计划时间 的相关文章

随机推荐