根据cron规格计算下一个计划时间
根据当前时间和cron规格计算事件下一个运行时间的有效方法是什么?根据cron规格计算下一个计划时间
我正在寻找除“通过每分钟循环检查它是否符合规格”之外的其他内容。规范的
例子可能是:
- 每个月,在上15:01
- 1日和15在每隔一小时
Python代码将是可爱的,但伪代码或高级描述也将不胜感激。
[更新]假设规范已经被解析并且格式合理。
只是看着它,我想你需要:
- 解析克隆氏病规范包含每个字段的可接受值的5个阵列;
- 将'now'解析为每个字段的值;
- 按分钟,小时,{月份或星期几},月份 - 年份的顺序:找到匹配或超过当前值的最低数组值,纠正进位。
我不知道如何同时处理星期几和星期几;我确信有一种方法,但另一方面,我不认为我曾经见过一个实际上指定了两者的规范。我认为只要写一个处理程序就足够了,如果你同时收到一个错误就会抛出错误。
编辑:显然,如果一个月中某一天的某一天的一周,同时指定,它应该是开枪都 - 也就是说,如果规则是“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
虽然这将是很好,如果它被写成一个实际的迭代器。也许我有我的下一个项目;-)
不错,找到croniter,非常感谢。我会把问题留给开放一段时间,看看是否有人在我们身上投下一个奇妙的算法。 – Parand 2011-01-06 19:54:31
感谢您的回答。我使用你的代码来使它工作,但我需要将它作为EXE文件运行,所以我使用py2exe将它编译成一个。对于任何想要使用它的人,你可以从这里下载它:http://www.toughtomato.com/cron2NextDate/。用法示例:cron2NextDate.exe“0 15 1 * *” – Martin 2011-03-18 12:55:07
不幸的是'croniter'不适用于DST更改。 – mike 2013-02-25 15:09:00
我已经做了这样的事情,并发现很难得到正确的(和我可能的“规格”是你的子集)。我只是用一些日期时间的计算和函数来完成每个规范的'类型'。我很感兴趣,如果有人有更好的答案(解决方案可能会使用库:x) – Gerrat 2011-01-06 01:23:41
你可以举一个规格格式的例子吗? – aaronasterling 2011-01-06 01:41:47