Cron表达式


1、语法格式

  • 6个域:second(秒)minute(分)hour(时)day(日)month(月)week(周)

  • 7个域:second(秒)minute(分)hour(时)day(日)month(月)week(周)year(年)

2、各字段含义

位置 域名 是否必填 允许值 允许的特殊字符
1 0-59 , - * /
2 0-59 , - * /
3 0-23 , - * /
4 1-31 - * ? / L W
5 1-12 or JAN-DEC , - * /
6 1-7 or SUN-SAT(1代表周日,7代表周六) , - * ? / L #
7 empty 或 1970-2099 , - * /

注:由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置通配符"?".

3、通配符含义

符号 意义 举例/说明
? 无意义值,相当于占位符 只在中使用
* 可用于所有时间域,表示该时间域的每一个时刻 cron="8 20 12 * 4 ?"=4月份每天中午12点20分8秒
, 多值连接 如在小时域上设置“7,9”,表示在7点和9点均触发
- 区间 如在小时域设置“7-9”,表示在7,8,9点均进行触发
/ 间隔,表达一个等步长序列,x为起始值,y为增量步长值 cron="2 59 0/25 13 * 2 ?"=2月份每天的"13:00:02",13:25:02,13:50:02
L 该字符只在日期域星期域中使用,代表Last的意思,但它在两个域中的意义不同 :当前月份的最后一天,如1月31日,非闰年2月28日; :表示星期六,同等于7。但如果出现在星期域中,而且在前面还有一个数值X,则表示“这个月的最后一个”,例如:5L表示该月的最后一个星期四
W 该字符只能出现在日期域中,表示离该日期最近的工作日 12W表示离该月12号最近的工作日,如果该月的12号星期六,则匹配11号星期五;如果12号星期日,则匹配13号星期一;如果12号星期三,那结果就是星期三。但必须注意关联的匹配日期不能够跨月,如指定1W,如果1号星期六,那么结果就是3号星期一,而非上个月的最后的那天。W只能指定单一日期,而不能指定日期范围。
# 该字符只能在星期域中使用,表示当月的第几个周几 6#3,表示当月的第3个星期五6表示星期五,#3表示当月的第3个

4、代码示例

(1)秒

cron="8 * * * * ?"

以上表达式含义为:每分钟的第 8 秒执行。秒后面的时间域是分钟,*(星号)表示每...,这里表示每分钟

注意:是每分钟的第 8 秒,不是每隔 8 秒

(2)秒+分

cron="8 20 * * * ?"

以上表达式含义为:每小时的第 20 分,第 8 秒执行 。分钟后的时间域是小时,由于是 *(星号),所以代表每小时。

(3)秒+分+ 时

cron="8 20 12 * * ?"

以上表达式含义为:每天中午 12 点 20 分 8 秒执行。小时后的时间域是天,*(星号)表示每天。

注意:时间的范围是 0-23,即 24 时制。所以 12 表示中午 12 点,如果表示午夜 12 点,表达式应该为:cron=8 20 0 * * ?

(4)秒+分+小时+日

cron="8 20 12 31 * ?"

以上表达式含义为:每个月的 31 号中午 12 点 20 分 8 秒执行。

注意:

1、如果某个月份中不包含 31 号,则不执行;

2、如果表达式为 cron="8 20 12 31 4 ?",启动项目时将会报错: 4 月份没有 31 号,此表达式永远都不会执行,所以月份与日要配合使用

(5)秒+分+小时+日+月

cron="8 20 12 30 4 ?"

以上表达式含义为:4 月 30 号中午 12 点 20 分 8 秒执行。

(6)秒+分+小时+日+月+星期

cron="8 20 12 30 4 3"

星期域具有特殊性,它由 1-7 组成,1 表示星期日(一周的开始),7 表示星期六(一周的最后一天);星期的定义与日和月同时表示,有可能会有冲突。

以上表达式,看着好像是 星期二 4 月 30 号 中午 12 点 20 分 8 秒这个意思,但实际上并不一定,原因很简单,你怎么就知道 4 月 30 号正好是星期二呢?所以这样定义表达式是存在问题的,也就是说星期在某种程度上是有冲突的。所以一般要在星期之间作出取舍。即定义了星期,就不定义日;定义了日,就不定义星期。不需要定义的时候使用?占位,舍弃谁谁就用

cron="8 20 12 ? 4 2"

以上表达式含义为:4 月份的每个星期 1 的中午 12 点 20 分 8 秒


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM