Cron 表达式的基本语法

基本语法

<秒> <分钟> <小时> <日期 day-of-month> <月份> <星期 day-of-week>

Cron 表达式是一个具有时间含义的字符串,字符串以 5 个空格隔开,分为 6 个域,格式为 X X X X X X。其中 X 是一个域的占位符。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。

域取值

位置字段约束取值可使用的特殊符号
1必须0-59, - * /
2分钟必须0-59, - * /
3小时必须0-23(0 为午夜), - * /
4日期必须1-31, - * ? / L W
5月份必须1-12 或者 JAN-DEC, - * /
6星期必须1-7 或者 SUN-SAT (1 代表星期一), - ? / L #

特殊符号

符号含义示例
*所有可能的值。在月域中,*表示每个月;在星期域中,*表示星期的每一天。
,列出枚举值。在分钟域中,5,20表示分别在 5 分钟和 20 分钟触发一次。
-范围。在分钟域中,5-20表示从 5 分钟到 20 分钟之间每隔一分钟触发一次。
/指定数值的增量。在分钟域中,0/15表示从第 0 分钟开始,每 15 分钟。在分钟域中3/20表示从第 3 分钟开始,每 20 分钟。*/0/ 相同
?不指定值,仅日期和星期域支持该字符。当日期或星期域其中之一被指定了值以后,为了避免冲突,需要将另一个域的值设为?
L单词 Last 的首字母,表示最后一天,仅日期和星期域支持该字符。说明 指定L字符时,避免指定列表或者范围,否则,会导致逻辑问题。在日期域中,L表示某个月的最后一天。在星期域中,L表示一个星期的最后一天,也就是星期日(SUN)。如果在L前有具体的内容,例如,在星期域中的6L表示这个月的最后一个星期六。
W除周末以外的有效工作日,在离指定日期的最近的有效工作日触发事件。W字符寻找最近有效工作日时不会跨过当前月份,连用字符LW时表示为指定月份的最后一个工作日。在日期域中5W,如果 5 日是星期六,则将在最近的工作日星期五,即 4 日触发。如果 5 日是星期天,则将在最近的工作日星期一,即 6 日触发;如果 5 日在星期一到星期五中的一天,则就在 5 日触发。
#确定每个月第几个星期几,仅星期域支持该字符。在星期域中,4#2表示某月的第二个星期四。

举个栗子🌰

表达式说明
0 0/5 * * * ?每隔 5 分钟执行一次
10 0/5 * * * ?每隔 5 分钟执行一次,每次执行都在分钟开始的 10 秒,例如 10:00:10、10:05:10 等等。
0 30 10-13 ? * WED,FRI每周三和每周五的 10:30、11:30、12:30、13:30 执行。
0 0/30 8-9 5,20 * ?每个月的 5 号和 20 号的 8 点和 10 点之间每隔 30 分钟执行一次,也就是 8:00、8:30、9:00 和 9:30。
0 15 10 ? * *每天上午 10:15 执行任务
0 15 10 * * ?每天上午 10:15 执行任务
0 0 12 * * ?每天中午 12:00 执行任务
0 0 10,14,16 * * ?每天上午 10:00 点、下午 14:00 以及下午 16:00 执行任务
0 0/30 9-17 * * ?每天上午 09:00 到下午 17:00 时间段内每隔半小时执行任务
0 * 14 * * ?每天下午 14:00 到下午 14:59 时间段内每隔 1 分钟执行任务
0 0-5 14 * * ?每天下午 14:00 到下午 14:05 时间段内每隔 1 分钟执行任务
0 0/5 14 * * ?每天下午 14:00 到下午 14:55 时间段内每隔 5 分钟执行任务
0 0/5 14,18 * * ?每天下午 14:00 到下午 14:55、下午 18:00 到下午 18:55 时间段内每隔 5 分钟执行任务
0 0 12 ? * WED每个星期三中午 12:00 执行任务
0 15 10 15 * ?每月 15 日上午 10:15 执行任务
0 15 10 L * ?每月最后一日上午 10:15 执行任务
0 15 10 ? * 6L每月最后一个星期六上午 10:15 执行任务
0 15 10 ? * 6#3每月第三个星期六上午 10:15 执行任务
0 10,44 14 ? 3 WED每年 3 月的每个星期三下午 14:10 和 14:44 执行任务