1、语法格式
-
6个域
-
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 秒