一、结构
一般为 6 或者 7 个区域块组成,两两之间使用空格分开:
① Seconds Minutes Hours DayofMonth Month DayofWeek
秒 分 小时 天(每月的几号) 月 星期几 年
② Seconds Minutes Hours DayofMonth Month DayofWeek Year
</p>
二、字段说明
字段 | 值范围 | 特殊字符 |
秒(Seconds) | 0 ~ 59(整数) | , - * / (四种特殊字符) |
分(Minutes) | 0 ~ 59(整数) | , - * / (四种特殊字符) |
小时(Hours) | 0 ~ 23(整数) | , - * / (四种特殊字符) |
天(DayofMonth) | 1 ~ 31(整数) | , - * / ? L W C (八种特殊字符) |
月(Month) | 1 ~ 12(整数) 或 JAN ~ DEC(英文缩写) | , - * / (四种特殊字符) |
星期几(DayofWeek) | 1~ 7(整数) 或 SUN ~ SAT (SUN == 1) | , - * / ? L C # (八种特殊字符) |
年(可选,留空)(Year) | 1970 ~ 2099(整数) | , - * / (四种特殊字符) |
- 字符说明:
① , :枚举,比如在分钟字段写 10,20,意思是第 10 分钟和第 20 分钟;
② - :区间,比如在分钟字段写 10-20,意思是 10 到 20 分钟的每一分钟;
③ * :任意,比如在分钟字段写 *,意思是每一分钟;
④ / :起始时间后的每隔固定时间,比如在分钟字段写 1/20,意思是从第 1 分钟开始后,每隔 20 分钟触发一次,即触发时间分别为,第 1、21、31、41、51分钟,所以,1/20 等同于 1,21,31,41,51;
⑤ ? :可以用于表示任意,但是并不一定有效,因为 ? 仅能使用在天和星期这两个字段上面,并且两者是互相影响的,比如在天这个字段上面写 1/10,那么在星期上面写 ? 则不生效,因为这个表达式的意思是每隔十天触发一次,而和星期无关,所以使用的时候,一般是写了天,星期则要使用?,写了星期,天则要使用?;
⑥ L :最后,last 的缩写,比如在星期这个字段上面写 2L,或者写 MONL,两者的意思都代表最后一个星期一,比如在天这个字段上面写 2L,则代表一个月的倒数第二天;
⑦ W :有效工作日(指周一到周五),系统会取离指定日期最近的工作日,比如写了3W,意思是3号会触发,但是如果3号是周六,则2号触发,如果3号是周日,则四号触发,另外,W不跨月份;
⑧ C :日历,Calendar,它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如 5C 在日期字段中就相当于日历5日以后的第一天,1C 在星期字段中相当于星期日后的第一天;
⑨ # :第几个星期几,比如 5#2,意思是第二个星期四;
- Tips:
① LW 可以一起用,意思是最后一个工作日;
② Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感
三、举例说明
① 0 0 2 1 * ? 每年每月的 1 号的凌晨 2 点
② 0 15 10 ? * MON-FRI 周一至周五的上午 10:15
③ 0 15 23 ? * 6L 2018-2020 2018 年至 2020 年的每月的最后一个星期五晚上 23:15
④ 0 0/5 10,18 ? 在每天早上的10点到10:55期间和和下午6点到6:55期间的每5分钟触发
⑤ 0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发