一、表達式格式
秒數 分鍾 小時 日期 月份 星期 年份(只此可為空)
cron表達式是由空格分隔的6或7個字段組成的字符串。
二、字段取值范圍
字段可以包含任何允許的值,以及該字段允許的特殊字符的各種組合。字段如下:
| 字段名稱 | 強制性 | 允許的值 | 允許的特殊字符 |
|---|---|---|---|
| 秒 | 是 | 0-59 | , - * / |
| 分鍾 | 是 | 0-59 | , - * / |
| 小時 | 是 | 0-23 | , - * / |
| 日 | 是 | 1-31 | , - *?/ LW |
| 月 | 是 | 1-12或JAN-DEC | , - * / |
| 星期 | 是 | 1-7或SUN-SAT | , - *?/ L# |
| 年 | 沒有 | 空,1970-2099 | , - * / |
注意
1、星期里,1表示的是星期天,2表示的是星期一,以此類推,7表示的是星期六
2、?只存在於某天或某星期中,且不能同時存在(還不支持同時指定某天和星期)
3、'L'和'W'字符也可以在日期字段中組合以產生'LW',這轉換為“最后一個工作日”
4、法定字符以及月份和星期的名稱不區分大小寫,如MON 與mon相同
5、一定要注意設置時間zone
三、特殊字符
| 字符 | 含義 | 使用范圍 | 描述 | 舉例 |
| * | 所有值 | 所有字段 | 用於選擇字段中的所有值 | 分鍾字段中的 * 表示每分鍾 |
| - | 用於指定范圍 | 所有字段 | 指定當前時間段位置上的一個時間范圍 | 小時字段中的10-12表示10到12內的小時數,即小時10,11和12這三個值 |
| , | 多個指定的值 | 所有字段 | 多個指定的值以逗號隔開 | 星期幾字段中的MON,WED,FRI表示 星期一,星期三和星期五 |
| / | 指定增量 | 所有字段 | 左邊是開始觸發時間,右邊是每隔固定時間觸發一次事件 | 秒字段中的5/15表示 秒 5,20,35和50;也可直接/20,相當於在'/'之前有'0',即表示0,20,40 |
| ? | 沒有特定值,不關心該字段的值 | 日,星期 | 需要在允許該字符的兩個字段之一中指定某些內容而在另一個字段中則不需要時非常有用 | 某月的某個特定日期(例如,第10天)觸發,但不關心恰好在一周的哪一天,星期幾字段中可放置? |
| L | last,允許的兩個字段的每一個中具有不同的含義 | 日,星期 | 日期字段中的值L表示月份的最后一天,在星期幾字段中單獨使用,則僅表示7或SAT | 還可以指定從該月的最后一天開始的偏移量,例如L-3,這意味着該月的倒數第三天 |
| W | work,用於指定最接近給定日期的工作日(周一至周五) | 日 | 前后和當前最接近工作日的那天,如當天是工作日則當天觸發,且不會跳過一個月的邊界 | 指定15W作為日期字段的值,則含義為:最接近該月的15日的工作日;若指定“1W”作為日期的值,並且第1個是星期六,則將在當月的3號觸發 |
| # | 指定當月的第幾個星期幾 | 星期 | 指定當月的第幾個星期幾 | 星期幾字段中的6#3的值表示該月的第三個星期五(第6天=星期五,#3=該月份的第3個星期五) |
四、示例
"0 0 12 * * ?" 每天12:00觸發事件
"0 15 10 ? * *" 每天10:15觸發事件
"0 15 10 * * ?" 每天10:15觸發事件
"0 15 10 * * ? *" 每天10:15觸發事件
"0 15 10 * * ? 2005" 2005年的每天10:15觸發事件
"0 * 14 * * ?" 每天14點開始觸發,每分鍾觸發一次,14:59分結束
"0 0/5 14 * * ?" 每天14點開始觸發到14:59分結束的每5分鍾觸發一次事件
"0 0/5 14,18 * * ?" 每天14點開始到14:59期間和18點到18:59期間的每5分鍾觸發一次事件
"0 0-5 14 * * ?" 每天14點到14:05期間的每1分鍾觸發一次事件
"0 10,44 14 ? 3 WED" 每年3月的星期三的14:10和14:44觸發一次事件
"0 15 10 ? * MON-FRI" 周一至周五的10:15觸發一次事件
"0 15 10 15 * ?" 每月15日10:15觸發一次事件
"0 15 10 L * ?" 每月最后一日的10:15觸發一次事件
"0 15 10 ? * 6L" 每月的最后一個星期五10:15觸發一次事件
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五10:15觸發一次事件
"0 15 10 ? * 6#3" 每月的第三個星期五10:15觸發一次事件
