根據當前時間和cron規格計算事件下一個運行時間的有效方法是什麼?根據cron規格計算下一個計劃時間
我正在尋找除「通過每分鐘循環檢查它是否符合規格」之外的其他內容。規範的
例子可能是:
- 每個月,在上15:01
- 1日和15在每隔一小時
Python代碼將是可愛的,但僞代碼或高級描述也將不勝感激。
[更新]假設規範已經被解析並且格式合理。
根據當前時間和cron規格計算事件下一個運行時間的有效方法是什麼?根據cron規格計算下一個計劃時間
我正在尋找除「通過每分鐘循環檢查它是否符合規格」之外的其他內容。規範的
例子可能是:
Python代碼將是可愛的,但僞代碼或高級描述也將不勝感激。
[更新]假設規範已經被解析並且格式合理。
只是看着它,我想你需要:
我不知道如何同時處理星期幾和星期幾;我確信有一種方法,但另一方面,我不認爲我曾經見過一個實際上指定了兩者的規範。我認爲只要寫一個處理程序就足夠了,如果你同時收到一個錯誤就會拋出錯誤。
編輯:顯然,如果一個月中某一天的某一天的一週,同時指定,它應該是開槍都 - 也就是說,如果規則是「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
Later.js是一個JavaScript庫,只是這樣做。它能夠解析Cron表達式,然後計算日程安排的未來事件。算法不是很花哨,但是它完成了這項工作。也許值得一瞧。
我已經做了這樣的事情,並發現很難得到正確的(和我可能的「規格」是你的子集)。我只是用一些日期時間的計算和函數來完成每個規範的'類型'。我很感興趣,如果有人有更好的答案(解決方案可能會使用庫:x) – Gerrat 2011-01-06 01:23:41
你可以舉一個規格格式的例子嗎? – aaronasterling 2011-01-06 01:41:47