關於 cron 日期 和星期 互排斥

關於cronExpression網上能夠搜到一大堆官方文檔及其翻譯,大部分都是出自同一篇轉文,翻譯的部分充滿了錯誤和語病,尤爲是關於問號(?)的解釋部分,實在是無法看。仍是本身研究一下吧。編程

 

官方文檔上提到問號時是這樣說的:spa

The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify 'no specific value'. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.翻譯

 

大體意思是說:orm

問號(?)能夠用在日期或星期字段,用來指明‘沒有特定的值’,當你爲這兩個字段中的一個設定值的時候就會用到它。下面的例子中說明了這一點。crontab

 

但是,在後面的例子中並無明確說明這個問號到底起什麼做用,因而我編程試驗了一下,得出如下結論:ci

一、如官方文檔解釋的那樣,問號(?)的做用是指明該字段‘沒有特定的值’;文檔

二、星號(*)和其它值,好比數字,都是給該字段指明特定的值,只不過用星號(*)表明全部可能值;it

三、cronExpression對日期和星期字段的處理規則是它們必須互斥,即只能且必須有一個字段有特定的值,另外一個字段必須是‘沒有特定的值’;io

四、問號(?)就是用來對日期和星期字段作互斥的。sed

 

基於以上結論就能夠解釋下列狀況:

一、當星期和日期都爲*或數字時,報錯
Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.

即兩個字段不能都指明的特定的值,必須互斥。這裏的*和數字是同樣的,若是都指明特定的數字,也是報同樣的錯。

二、當星期和日期都爲?時,報錯
'?' can only be specfied for Day-of-Month -OR- Day-of-Week.

即兩個字段不能都‘沒有特定的值’。

 

這個是Spring的實現,沒有什麼道理,Spring就是規定這兩個字段必須這樣互斥的設置。

這與UNIX的crontab設置不同,crontab的規則是日期和星期中只要知足一個就觸發,因此不存在互斥的問題。

相關文章
相關標籤/搜索