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

Par*_*and 14 python algorithm cron scheduler

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

我正在寻找除"每一分钟检查它是否符合规格"之外的其他内容.

规范示例可能是:

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

Python代码很可爱,但是psuedo代码或高级描述也会受到赞赏.

[更新]假设规范已经解析并且格式合理.

Hug*_*ell 17

只是看着它,我想你需要:

  • 将chron规范解析为包含每个字段可接受值的五个数组;
  • 将'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
Run Code Online (Sandbox Code Playgroud)

版画

2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00
Run Code Online (Sandbox Code Playgroud)

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