cron表达式使用详解
Cron表达式是一个字符串,字符串空格分割,每一个域代表一个含义,一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素
一、结构
corn从左到右(用空格隔开):秒 分 时 日 月 星期 年(可选,留空)
二、各字段的含义
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒 | 0~59的整数 | , - * / 四个字符 |
分 | 0~59的整数 | , - * / 四个字符 |
时 | 0~23的整数 | , - * / 四个字符 |
日 | 1~31的整数 | ,- * ? / L W C 八个字符 |
月 | 1~12的整数或者或者 JAN-DEC | , - * / 四个字符 |
星期 | 0~7的整数或者 SUN-SAT (0 or 7=SUN) | , - * ? / L C # 八个字符 |
年 | 1970~2099整数 | , - * / 四个字符 |
特殊字符含义
(1)* 表示匹配该域的任意值。或者每(例如每秒、每分,每小时,每天,每周,每个月)
(2)? 它也匹配域的任意值,表示不确定,不管。例如想在每月的20日触发调度,不管20日到底是星期几:13 13 15 20 * ?
(3)- 表示范围。例如在分钟域使用5-20,表示从5分到20分钟每分钟触发一次
(4)/ 表示起始时间开始触发,然后每隔固定时间触发一次。例如在分钟域使用5/20,则意味从5分开始触发,后续每隔20分钟触发一次,即5分,25分,45分各触发一次.
(5), 表示列出枚举值。例如:在分钟域使用5,20,则意味着在5和20分时各触发一次,共两次。
(6)L 表示最后,如果在星期域使用5L,意味着在最后的一个星期五触发。
(7)W 表示有效工作日(周一到周五),系统将在离指定日期的最近的有效工作日触发事件。例如:在月使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。另外一点,W的最近寻找不会跨过月份 。
(8)L W 这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
(9)# 用于确定每个月第几个星期几,只能出现在月份域。例如在4#2,表示某月的第二个星期四。
(10)星期除了用数字还可以用英文缩写代替:SUN,MON,TUE,WED,THU,FRI,SAT,对星期的枚举, 0或者7表示礼拜天,1表示礼拜1,6表示礼拜6,网上的很多帖子里说的都是错的,要注意下
(11)C 允许在日期域和星期域出现,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期一后的第一天。
三、常用表达式例子
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *” 每天上午10:15触发
“0 15 10 * * ?” 每天上午10:15触发
“0 15 10 * * ? *” 每天上午10:15触发
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发
“0 15 10 L * ?” 每月最后一日的上午10:15触发
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6#3” 每月的第三个星期五上午10:15触发