在现代的应用开发、系统管理等应用场景下,经常使用定时任务,实现定时任务是一般使用cron表达式控制时间,本篇文章分享一下cron表达式。
cron表达式由6或7个部分组成,各部分用空格隔开,例如:"0 15 10 * * ? 2005"
cron表达式的格式
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
字段 | 允许值 | 允许特殊符号 |
---|---|---|
秒 | 0~59 | , - * / |
分 | 0~59 | , - * / |
时 | 0~23 | , - * / |
日期 | 1~31 | , - * ?/ L W C |
月份 | 1~12 or JAN-DEC | , - * / |
星期 | 1~7 or SUN-SAT | , - * ?/ L C # |
年(可为空) | 1970~2099(留空) | , - * / |
cron表达式的符号
“,” :字符被用来指定某一字段多个值的分隔符,如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”;
“-” :字符被用来指定一个范围,如:"1-6"代表从1月份开始触发到6月份结束触发,每隔1个月触发;
“*” :指定整个时间段中任意时间点,如:对小时来说,“*”表示每小时,对于星期来说,“*”表示每星期;
“/” :指定一个值的增加幅度。n/m表示从n开始,每次增加m,如:对于小时,"0/1"或者"*/1"代表从0点开始触发,每隔1小时触发1次;"1/2"代表从1点开始触发,以后每隔2小时触发一次;
“?” :字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值
“L” :表示最后,是单词“last”的缩写,仅被用于天(月)和天(星期)两个子表达式,如果{星期}占位符如果是"L",即意味着星期的的最后一天触发,即星期六触发,L= 7或者 L = SAT,因此,"5L"意味着一个月的最后一个星期四触发;
“W” :表示为最近工作日,如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发;
"C" :这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一);
“#” :用来指定具体的周数,"#"前面代表星期,"#"后面代表本月第几周,比如"2#2"表示本月第二周的星期一,"5#3"表示本月第三周的星期四。