在给定当前时间和cron规范的情况下,计算事件的下一个运行时间的有效方法是什么?
我正在寻找除了“每一分钟检查它是否符合规格”之外的其他内容。
规范示例可能是:
- 每个月,1日和15日15:01
- 每小时10,20,30,40,50分钟
Python代码很可爱,但psuedo代码或高级描述也将受到赞赏。
[更新]假设规范已经解析并且格式合理。
在给定当前时间和cron规范的情况下,计算事件的下一个运行时间的有效方法是什么?
我正在寻找除了“每一分钟检查它是否符合规格”之外的其他内容。
规范示例可能是:
Python代码很可爱,但psuedo代码或高级描述也将受到赞赏。
[更新]假设规范已经解析并且格式合理。
只是看着它,我想你需要:
我不知道如何同时处理星期和星期几;我确信有一种方法,但另一方面,我认为我从未见过实际指明两者的规范。我认为为两者编写处理程序就足够了,如果同时收到错误就抛出错误。
编辑: 显然,如果指定了星期几和星期几,那么它应该开启 都 - 即如果规则为'15th,Wednesday',它将每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
虽然如果把它写成实际的迭代器会很好。也许我有我的下一个项目;-)
Later.js 是一个javascript库,它就是这样做的。它能够解析Cron表达式,然后计算计划的未来出现次数。它的算法不是很花哨,但它可以完成这项任务。也许值得一瞧。