Quartz中的時間表達式介紹和常用表達式


Quartz.NET是一個開源的作業調度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而創建簡單的或復雜的調度。它有很多特征,如:數據庫支持,集群,插件,支持cron-like表達式等等
比如:表示式:  0 0 12 * * ?    表示:每天的12點調用

1、特殊符號的介紹

Cron表達式的時間字段除允許設置數值外,還可使用一些特殊的字符,提供列表、范圍、通配符等功能,細說如下

1)星號(*):可用在所有字段中,表示對應時間域的每一個時刻,例如,*在分鍾字段時,表示“每分鍾”;

2)問號(?):該字符只在日期和星期字段中使用,它通常指定為“無意義的值”,相當於點位符;

3)減號(-):表達一個范圍,如在小時字段中使用“10-12”,則表示從10到12點,即10,11,12;

4)逗號(,):表達一個列表值,如在星期字段中使用“MON,WED,FRI”,則表示星期一,星期三和星期五;

5)斜杠(/):x/y表達一個等步長序列,x為起始值,y為增量步長值。如在分鍾字段中使用0/15,則表示為0,15,30和45秒,

  而5/15在分鍾字段中表示5,20,35,50,你也可以使用*/y,它等同於0/y;

 

2、Quartz Cron 表達式支持到七個域

ps: 月份和星期的名稱是不區分大小寫的。FRI 和 fri 是一樣的,

域之間有空格分隔,這和 UNIX cron 一樣。無可爭辯的,我們能寫的最簡單的表達式看起來就是這個了:

* * * ? * *這個表達會每秒鍾(每分種的、每小時的、每天的)激發一個部署的 job

 

3、特殊符號

1)星號(*):指示着你想在這個域上包含所有合法的值。例如,在月份域上使用星號意味着每個月都會觸發這個 trigger。

例如:0 * 17 * * ?   意義:每天從下午5點到下午5:59中的每分鍾激發一次 trigger。

2)問號(?):? 號只能用在日和周域上,但是不能在這兩個域上同時使用。你可以認為? 字符是 "我並不關心在該域上是什么值。"

這不同於星號,星號是指示着該域上的每一個值。? 是說不為該域指定值。

例如:0 10,44 14 ? 3 WEB  意義:在三月中的每個星期三的下午 2:10 和 下午 2:44 被觸發

3)逗號(,): 逗號 (,) 是用來在給某個域上指定一個值列表的。

例如: 0 0,15,30,45 * * * ?  意義:每個15秒觸發一次trigger

4)斜杠(/): 斜杠 (/) 是用於時間表的遞增的。我們剛剛用了逗號來表示每15分鍾的遞增,但是我們也能寫成這樣0/15。

例如:0/15 0/30 * * * ?  意義:在整點和半點時每15秒觸發 trigger。

5)中划線(-):中划線 (-) 用於指定一個范圍。例如,在小時域上的 3-8 意味着 "3,4,5,6,7 和 8 點。" 域的值不允許回卷,所以像 50-10 這樣的值是不允許的

例如: 0 45 3-8 ? * *   意義:在上午的3點至上午的8點的45分時觸發 trigger

6)L字母:L 說明了某域上允許的最后一個值。它僅被日和周域支持。當用在日域上,表示的是在月域上指定的月份的最后一天。例如,當月域上指定了JAN 時,

日域上的L會促使 trigger 在1月31號被觸發。假如月域上是SEP,那么 L 會預示着在9月30號觸發。換句話說,就是不管指定了哪個月,都是在相應月份的時最后一天觸發 trigger。

例如: 0 0 8 L * ?    意義 是在每個月最后一天的上午 8:00 觸發 trigger。在月域上的 * 說明是 "每個月"。

L 字母用於周域上,指示着周的最后一天,就是星期六 (或者數字7)。所以如果你需要在每個月的最后一個星期六下午的 11:59 觸發 trigger,你可以用這樣的表達式0 59 23 ? * L。
當使用於周域上,你可以用一個數字與 L 連起來表示月份的最后一個星期 X。例如,表達式 0 0 12 ? * 2L 說的是在每個月的最后一個星期一觸發 trigger

7)W字母:W 字符代表着平日 (Mon-Fri),並且僅能用於日域中。它用來指定離指定日的最近的一個平日。大部分的商業處理都是基於工作周的,所以 W 字符可能是非常重要的。

例如,日域中的15W 意味着 "離該月15號的最近一個平日。" 假如15號是星期六,那么 trigger 會在14號(星期五)觸發,因為星期四比星期一(這個例子中是17號)離15號更近。

(譯者Unmi注:不會在17號觸發的,如果是15W,可能會是在14號(15號是星期六)或者15號(15號是星期天)觸發,也就是只能出現在鄰近的一天,如果15號當天為平日直接就會當日執行)。

W只能用在指定的日域為單天,不能是范圍或列表值。

8)#號:# 字符僅能用於周域中。它用於指定月份中的第幾周的哪一天。例如,如果你指定周域的值為6#3,它意思是某月的第三個周五 (6=星期五,#3意味着月份中的第三周)。

另一個例子2#1意思是某月的第一個星期一 (2=星期一,#1意味着月份中的第一周)。注意,假如你指定#5,然而月份中沒有第 5 周,那么該月不會觸發

 

4、常用Corn表達式

1)分鍾Corn表達式

2)日上Corn表達式

3)周、月表達式

參考資料來源於:http://www.cnblogs.com/GarfieldTom/p/3746290.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM