Cron表达式是一个字符串,定义时间规则,由6或7个时间域组成,空格分隔。1张表整理清楚含义和规则,并举例常用表达式,放手边速查。

Cron表达式

时间域序号 含义 取值范围 特殊字符
1 秒Seconds 0-59 ,-*/
2 分钟Minutes 0-59 ,-*/
3 小时Hours 0-23 ,-*/
4 日期DayOfMonth 1-31 ,-*/ ? L W C
5 月份Month 1-12 ,-*/ JAN-DEC
6 星期DayOfWeek 1-7 ,-*/ ? L C # SUN-SAT
7 年Year (可选) 1970-2099 ,-*/

特殊字符含义

JAN-DEC 月份英语简称
SUN-SAT 星期英语简称
星期的1表示星期天,2表示星期一,依次类推
* 表示取值范围内的所有数字
/ 表示每隔固定时间触发依次,比如0/5表示从0开始每5个单位时间
- 表示两个数字之间的范围,比如3-7表示3到7之间,包含3和7
, 表示离散的枚举数字,比如2,3,5,7表示指定的这几个时间
? 只能用在日期DayOfMonth和星期DayOfWeek两个域,表示不指定,避免日期和星期的互相影响,比如指定每月的20日,不管是星期几,正确写法是:0 0 0 20 * ?,其中星期只能用?,如果使用*将触发错误。
L 只能用于日期DayOfMonth和星期DayOfWeek,用于日期时表示月份的最后一天,用于星期时不加数字表示周六,加数字表示最后一个周几,比如0 0 0 ? * 5L表示每月的最后一个星期四
W 只能用于日期DayOfMonth,表示周一到周五有效工作日,将在离指定日期的最近的有效工作日触发事件。例如在日期使用5W,如果5日是星期六,则将在最近的工作日星期五(4日)触发。如果5日是星期天,则在6日(星期一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近工作日寻找不会跨月份。
LW 两个字符连用时表示某个月最后一个工作日
# 只能用于星期DayOfWeek,表示每个月第几个星期几,比如4#2表示第二个星期三

常用表达式

0/5 * * * * ? 每5秒钟
0 0/5 * * * ? 每5分钟
0 0 6 * * ? 每天早上6点
0 0 9,13,19 * * ? 每天上午9点,下午1点,晚上7点
0 0 23-7/2,8 * * ? 每天晚上11点到早上7点之间的每两个小时,和早上8点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 9-21 ? * MON-SAT 表示996每天的每小时
0 0 7 LW * ? 每月最后一个工作日早上7点
0 0 4 1 1 ? 每年的1月1日早上4点