标准 Quartz cron 教程
cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义。
cron语法格式:秒 分 时 日 月 周 [年]
* * * * * * *
- - - - - - -
| | | | | | |
| | | | | | +-- 年(可选字段)
| | | | | +------ 周 (星期天 ~ 星期六使用1-7或者SUN,MON,TUE,WED,THU,FRI,SAT)
| | | | +---------- 月 (1 - 12或者JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC)
| | | +-------------- 日 (1 - 31)
| | +------------------ 时 (0 - 23)
| +---------------------- 分 (0 - 59)
+-------------------------- 秒 (0 - 59)
每个域允许的值
| 位置 | 字段名 | 必填 | 取值范围 | 特殊字符 |
|---|---|---|---|---|
| 1 | 秒 | 是 | 0-59 | * - / , |
| 2 | 分 | 是 | 0-59 | * - / , |
| 3 | 时 | 是 | 0-23 | * - / , |
| 4 | 日 | 是 | 1-31 | * - / , ? L W C |
| 5 | 份 | 是 | 1-12 或 JAN-DEC | * - / , |
| 6 | 周 | 是 | 1-7 或 SUN-SAT | * - / , ? L # C |
| 7 | 年 | 否 | 1970-2099 | * - / , |
特殊字符的含义
| 字符 | 含义 | 示例 |
|---|---|---|
| * | 表示匹配域的任意值 | 在秒这个域使用 *,即表示每秒钟都会执行一次。 |
| - | 表示区间范围 | 在分这个域使用 6-18,表示从6分到18分钟每分钟执行一次。 |
| / | 表示起始时间开始执行一次,然后每隔固定时间执行一次 | 在分这个域使用6/16,表示在第6分钟时执行一次,之后每16分钟执行一次,即在第5分钟、第21分、第37分、第53分分别执行一次。 |
| , | 表示列出枚举值 | 在时这个域使用8,10,则意味着在每天8点和10点分别执行一次。 |
| ? | 表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。 | 要在每月的20号执行一次,不管每个月的20号是星期几,则只能使用如下写法:0 0 0 20 * ?。其中,因为日期域已经指定了 20 号,最后一位星期域只能用?,不能使用其他。0 0 0 ? * 1 最后一位使用1表示周天,则表示不管日是哪一天,只要是周天就会执行。 |
| L | 表示最后,只能出现在【日】和【周】两个域 | 在【日】这个域使用,表示本月的最后一天;在【周】这个域使用,例如5L意味着在最后的一个星期四触发。 |
| W | 表示有效工作日(周一到周五),只能出现在日这个域,系统将在离指定日期最近的有效工作日触发事件。 | 在日这个域使用,例如15W,表示在每月最接近15号的工作日触发。如果15号是星期二,就在15号触发;如果15号是星期六,就在14号(周五)触发;如果15号是星期日,那就在16号(周一)触发;绝对不会跨月。 |
| LW | 这两个字符可以连用,表示在某个月最后一个工作日 | 比如:0 0 10 LW * ?;表示在每个月的最后一个工作日的10点执行 |
| # | 表示每个月第几个星期几,只能出现在星期这个域 | 在星期这个域使用 4#2,表示某月的第二个星期三,4 表示星期三,2 表示第二个。 |
| C | 该字符只在日期和星期字段中使用,代表“Calendar”的意思 | 它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。但由于其复杂性,很少使用 |
各个域详解
秒
1. *
含义:代表该字段所有有效的取值。
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
分
1. *
含义:代表该字段所有有效的取值。
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
时
1. *
含义:代表该字段所有有效的取值。
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
日
1. *
含义:代表该字段所有有效的取值。
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
5. ?
含义:表示不指定。日如果是不指定,那么周必须不能是?,两个字段有且只能有一个?不指定,不能同时指定,也不能同时不指定
6. L
含义:表示每月最后一天
7. W
含义:表示距离有效工作日最近的那个工作日,有效工作日指周一到周五
8. C
含义:表示和日历绑定。如果没有和日历绑定,则和*含义一样,逻辑复杂,很少使用
月
1. *
含义:代表该字段所有有效的取值。
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
周
1. *
含义:代表该字段所有有效的取值。
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
5. ?
含义:表示不指定。周如果是不指定,那么日必须不能是?,两个字段有且只能有一个?不指定,不能同时指定,也不能同时不指定
6. L
含义:表示最后一个周几执行
7. #
含义:表示第几个周几执行,格式:周几#第几个
8. C
含义:表示和日历绑定。很少使用
年
1. *
含义:代表该字段所有有效的取值。这里的*和不指定是一样的,都是每年
2. -
含义:代表区间范围
3. /
含义:表示起始时间开始触发,然后每隔固定时间执行一次
4. ,
含义:表示枚举
附录
月的缩写对照表
| 月份 | 数字 | 缩写 |
|---|---|---|
| 一月 | 1 | JAN |
| 二月 | 2 | FEB |
| 三月 | 3 | MAR |
| 四月 | 4 | APR |
| 五月 | 5 | MAY |
| 六月 | 6 | JUN |
| 七月 | 7 | JUL |
| 八月 | 8 | AUG |
| 九月 | 9 | SEP |
| 十月 | 10 | OCT |
| 十一月 | 11 | NOV |
| 十二月 | 12 | DEC |
周的缩写对照表
| 周几 | 数字 | 缩写 |
|---|---|---|
| 周日 | 1 | SUN |
| 周一 | 2 | MON |
| 周二 | 3 | TUE |
| 周三 | 4 | WED |
| 周四 | 5 | THU |
| 周五 | 6 | FRI |
| 周六 | 7 | SAT |