定时器表达式
前言
Github:https://github.com/HealerJean
1、定时器表达式
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒(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 (1=SUN) | , - * ? / L C # |
年(可选,留空,可选字段)(Year) | 1970~2099 | , - * / 四个字符 |
“?”字符:表示不确定的值
“,”字符:指定数个值
“-”字符:指定一个值的范围
“/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
“W”字符:指定离给定日期最近的工作日(周一到周五)
“#”字符:表示该月第几个周X。6#3表示该月第3个周五
1.1、解释
1.1.1、*
:匹配该域的任意值
假如在Minutes域使用·
*
,即表示每分钟都会触发事件。
1.1.2、?:
指定非明确的值、或者叫无意义的值
字符只在日期域和星期域中使用。它被用来指定“非明确的值、或者叫无意义的值, 不能在这两个域上同时使用。可以认为
?
字符是 我并不关心在该域上是什么值 , 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。只要记住,假如这两域的其中一个指定了值,就必须在另一个字值上放一个 ?。
比如:月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。
1.1.3、-
:指定一个范围
例如在Minutes域使用5-7,表示从5分,6分,7分
1.1.4、/
:用于指定增量
前面表示从什么开始,后面表示,每多长重复
“0/15”在秒域:每分钟的0,15,30和45秒。
“5/15”在分钟域:每小时的5,20,35和50 分。
1.1.5、,
:表示指定多个值
例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
1.1.6、L
:表示最后的意思
只出现在
日域
和星期域
两个子表达式,它是单词 “last” 的缩写。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]),
在周字段上表示星期六,相当于”7”或”SAT”。
例如:如果在day-of-week
域中前面加上数字,例如‘6L’就表示每个月的最后一个星期的第六天,也就是星期五。
1.1.7、W
:表示有效工作日
W
:表示有效工作日(周一到周五),只出现在日域
,系统将在离指定日期的最近的有效工作日触发事件。注,”W”前只能设置具体的数字,不允许区间”-
例如在日字段上设置”15W”:表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。
如果指定格式为 “1W”:它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。
1.1.8、LW
:表示星期五
在
日域
中联合使用,表示这个月最后一周的工作日。即星期五
1.1.9、#
: 表示每月的第几个周的星期几
只在
星期域
中出现。这个字符用于指定本月的某某天。
“6#3”:表示本月第三周的星期五(6表示星期五,3表示第三周)。
“2#1”:表示本月第一周的星期一。
2、问题
2.1、0 0/10 * * *
与 0 */10 * * *
的差别在于什么地方。
解释:在说这两者的差别之前,先说下各个字符代表的含义。0代表从0分开始,*代表任意字符,/代表递增。
举例:从5:07分钟的时候执行该任务第一种写法会在5:10的时候进行执行,写法二会在5:17进行执行。这就是两者的差别。
但是经过我本人测试,好像没有什么区别,都是按照第一种走的
2.2、*
和 ?
区别
**例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 *
?,其中最后一位只能用?,而不能使用*, **
如果使用*
表示不管星期几都会触发,所以周域不能使用?
了。
3、常见表达式
表达式 | 说明 |
---|---|
0 0 12 * * ? | 每天的12点出发 |
0 15 10 ? * * | 每天10点15分触发 |
0 * 10 * * ? | 每天10:00-10:59,每分钟触发一次 |
0 0/5 10 * * ? | 每天 10:00-10:59,每隔5分钟触发,以0开始递增 |
0 0/5 10,15 * * ? | 每天10:00-10:59,15:00-15:59,每隔5分触发 |
0 0-5 15 * * ? | 每天15:00-15:05,每分触发 |
0 10,55 14 ? 3 WED | 3月份每周三14:10触发 ,14:55触发 |
0 15 10 ? * MON-FRI | 从周一到周五每天10:15分触发 |
0 15 10 L * ? | 每月最后一天的10:15分触发 |
0 15 10 ? * 6L | 每月最后一周的星期五的10:15分触发 |
0 15 10 ? * 6L 2017-2020 | 从2017年到2020年每月最后一个星期五的10:15分触发 |
0 15 10 ? * 6#3 | 每月的第三周的星期五10:15触发 |
0 0 12 1/5 * ? | 每月的第一天开始每隔5天的12:00触发一次 |
0 11 11 11 11 ? | 每年的11月11号 11点11分触发(光棍节) |
0 0/30 9-17 * * ? ? ? | 朝九晚五工作时间内每半小时 |