Quartz.NET Cron表达式用法一览
2017-02-28 13:36
274 查看
Cron表达式
Quartz下Cron表达式由6或7个由空格分隔的时间字段(如("0 3 4 * * ? ")或("0 3 4 * * ? 2017"))组成,如下表所示:
位置 | 时间域名 | 允许值 | 允许的特殊字符 |
1 | 秒 | 0-59 | , - * / |
2 | 分钟 | 0-59 | , - * / |
3 | 小时 | 0-23 | , - * / |
4 | 日期 | 1-31 | , - * ? / L W C |
5 | 月份 | 1-12 | , - * / |
6 | 星期 | 1-7 | , - * ? / L C # |
7 | 年(可选) | 空值1970-2099 | , - * / |
● 星号(*): 可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;
● 问号(?): 该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;
● 减号(-): 表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;
● 逗号(,): 表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;
● 斜杠(/): x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;
● L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。L在日期字段中,表示这个月 份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值 X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;
● W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工 作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意 关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期
范围;
● LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;
● 井号(#):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;
● C:该字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天。
Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。
以下是几个Cron表达式的例子:
表示式 | 说明 |
"0 0 12 * * ? " | 每天12点运行 |
"0 15 10 ? * *" | 每天10:15运行 |
"0 15 10 * * ?" | 每天10:15运行 |
"0 15 10 * * ? *" | 每天10:15运行 |
"0 15 10 * * ? 2014" | 在2014年的每天10:15运行 |
"0 * 14 * * ?" | 每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。 |
"0 0/5 14 * * ?" | 每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。 |
"0 0/5 14,18 * * ?" | 每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。 |
"0 0-5 14 * * ?" | 每天14:00点到14:05,每分钟运行一次。 |
"0 10,44 14 ? 3 WED" | 3月每周三的14:10分到14: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 2013-2015" | 在2013,2014,2015年每个月的最后一个星期五的10:15分运行。 |
"0 15 10 ? * 6#3" | 每月第三个星期五的10:15分运行。 |
Cron表达式特殊字符详解
下来的cron表达式,我会结合着quartz来描述。首先cron表达式是有7个域的,依次分别是:秒分时日月周年,其中年是可选类型,也就是说他如果在不设定年分的情况下是每年。1、星号(*)
他在每个域都可以存在,包含所有合法的值,看好这里是包含所有,意思就是说在那一个域上表示这个域上的所有值,加入在月,表示1-12,也就是说是每月,都会被执行。
示例1:0**1*? note:每月1号凌晨都会被执行。
示例2:0**?** note:每分钟的00秒被执行。
2、问号(?)
他在cron表达式中,必定存在,有且只有一个,且他只能在日和周的域中存在,表示,不关系这个域是什么值,看好了,跟*的包含所有值不同,他是不关系是月的哪一天或是周的哪一天。如果在周域定义具体的数值,日域必须为问号(?),如果在日域定义啦具体的数值,那么周域就必须为问号(?)。为什么,因为避免含糊不清的表达方式,比如3月的第20天,刚好是第三周的第5天,那么如果在日域定义20,周域定义5这样,就双重定义,很蛋疼。cron表达式也不允许。
示例1:0 10 18 ? 3 WEB note:每年3月的每个星期三,下午6点10分都会被触发
示例2:0 10 18 15 3 ? note:每年三月的第15天,下午6点10分都会被触发
3、横杠(-)
他在cron表达式中,可以存在任何域,如果存在某个域,表示起止时间,他表示一个时间段。
实例1:0 10 18 1-5 * ? note:每月的1号到5号(包含每月1号和5号,每月共计5天都会被触发),下午6点10分都会被触发
实例2:0 10-15 * ? * * note:每小时的第10分钟到第15分钟(包含每小时的第10分钟和第15分钟,每小时共计5分钟都会被触发),都会被触发
4、逗号(,)
他在cron表达式中,可以存在任何域,如果存在某个域,表示可选值,他是个多点的概念。
实例1:10,20 * * ? * * note:每分钟的第10秒与第20秒都会被触发
实例2:0 10,20 * 1,2 * ? note:每月的第1天与第2天的,每小时的第10分钟与第20分钟被触发。
5、斜划线(/)
他在cron表达式中,可以存在任何域,表示增量,是在域中设定一个起始的值,然后每隔多少时间的概念。
实例1:5/20 * * ? * * note:每分钟的第5秒,第25秒,第45秒 都会被执行。
实例2:0 * 2/2 ? * * note:每天的第2小时,第4小时,第6小时,第8小时 ... 第22小时的00分00秒都会被触发。
6、井号(#)
他在cron表达式中,只能存在周这一个域,表示第几周的星期几,如果超出范围,则忽略不记。
实例1:* * * ? * 3#4 note:每月的第4个星期的周2,凌晨触发。
实例2:* * * ? * 6#2 note:每月的第2个星期的周5,凌晨触发
相关文章推荐
- Quartz.net配置文件实例及cron表达式详解
- Quartz.NET 2.0 学习笔记(4) :cron表达式
- Cron表达式(在Quartz.net里面会用到)
- Quartz中Cron表达式用法
- Quartz中Cron表达式用法
- Quartz.net配置文件实例及cron表达式详解
- Quartz.net配置文件实例及cron表达式详解
- Quartz的cron表达式
- Quartz的cron表达式
- 《pro Spring》一书中关于quartz cronTrigger表达式通配符的严重错误
- spring定时器及cron表达式(quartz中时间表达式)
- Quartz使用之:Cron 表达式
- cron表达式(quartz中时间表达式)
- Quartz的cron表达式
- quartz cron 表达式详解
- Quartz 中的cron 表达式的格式
- Quartz实现定时功能,Cron表达式调度等等
- Quartz的cron表达式
- Quartz的cron表达式[转] 推荐
- Quartz.net官方开发指南 第六课 : CronTrigger