关于cron表达式

又是一篇工具类的文章,供查询所用,顺便在此仅重温一下 cron 表达式。

一、结构

    一般为 6 或者 7 个区域块组成,两两之间使用空格分开:

    ① Seconds   Minutes   Hours   DayofMonth   Month   DayofWeek

        秒              分            小时    天(每月的几号)       月      星期几          年

    ② Seconds   Minutes   Hours   DayofMonth   Month   DayofWeek   Year

    


</p>

二、字段说明

字段
值范围特殊字符
秒(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 (SUN == 1),  -  *  /  ?  L  C   #  (八种特殊字符)
年(可选,留空)(Year)1970 ~ 2099(整数),  -  *  /  (四种特殊字符)
  • 字符说明:

        ①   ,  :枚举,比如在分钟字段写 10,20,意思是第 10 分钟和第 20 分钟;

        ②  -  :区间,比如在分钟字段写 10-20,意思是 10 到 20 分钟的每一分钟;

        ③  *  :任意,比如在分钟字段写 *,意思是每一分钟;

        ④  /  :起始时间后的每隔固定时间,比如在分钟字段写 1/20,意思是从第 1 分钟开始后,每隔 20 分钟触发一次,即触发时间分别为,第 1、21、31、41、51分钟,所以,1/20 等同于 1,21,31,41,51;

        ⑤  ?  :可以用于表示任意,但是并不一定有效,因为 ? 仅能使用在天和星期这两个字段上面,并且两者是互相影响的,比如在天这个字段上面写 1/10,那么在星期上面写 ? 则不生效,因为这个表达式的意思是每隔十天触发一次,而和星期无关,所以使用的时候,一般是写了天,星期则要使用?,写了星期,天则要使用?;

        ⑥  L  :最后,last 的缩写,比如在星期这个字段上面写 2L,或者写 MONL,两者的意思都代表最后一个星期一,比如在天这个字段上面写 2L,则代表一个月的倒数第二天;

        ⑦  W :有效工作日(指周一到周五),系统会取离指定日期最近的工作日,比如写了3W,意思是3号会触发,但是如果3号是周六,则2号触发,如果3号是周日,则四号触发,另外,W不跨月份;

        ⑧  C  :日历,Calendar,它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如 5C 在日期字段中就相当于日历5日以后的第一天,1C 在星期字段中相当于星期日后的第一天;

        ⑨  #  :第几个星期几,比如 5#2,意思是第二个星期四;


  • Tips:

        ① LW 可以一起用,意思是最后一个工作日;

        ② Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感



三、举例说明

    ① 0 0 2 1 * ?    每年每月的 1 号的凌晨 2 点

    ② 0 15 10 ? * MON-FRI    周一至周五的上午 10:15  

    ③ 0 15 23 ? * 6L 2018-2020   2018 年至 2020 年的每月的最后一个星期五晚上 23:15 

    ④ 0 0/5 10,18 ?     在每天早上的10点到10:55期间和和下午6点到6:55期间的每5分钟触发 

    ⑤ 0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发





------ 本文结束 感谢阅读 ------
0%