在给定当前时间和 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(使用前将#替换为@)