quartz.net 时间表达式----- Cron表达式详解
序言
Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无缝,说是编码艺术凝集一点不过分。
牛逼吹完啦,我就写几个简单的cron表达式欣赏下:
1、0/20 * * * * ? note:每20秒
2、15 0/2 * * * ?
note:每小时从0分钟开始,每2分钟的第15秒,假如当前时间是20:00:00,那么他的维度就在:20:02:5,20:04:15,20:06:15 ....
3、0 0/2 17-21 * * ?
note: 每天的下午5点到晚上9点,每隔2分中的第00秒,假如当前时间是20:24:52 ,那么他的时间维度在:20:26:00,20:28:00,20:30:00 ...
看到Cron表达式的简洁与强大并存,忍不住往下深入,Go
Cron表达式的符号、格式表格
表1、cron表达式特殊字符意义示意表
|
特殊字符 |
意义 |
|
* |
匹配所有的值。如:*在分钟的字段域里表示 每分钟 |
|
? |
只在日期域和星期域中使用。它被用来指定“非明确的值” |
|
- |
指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点” |
|
, |
指定几个可选值。如:“MON,WED,FRI”在星期域里表示“星期一、星期三、星期五” |
|
/ |
指定增量。如:“0/15”在秒域意思是没分钟的0,15,30和45秒。“5/15”在分钟域表示没小时的5,20,35和50。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10) |
|
L |
表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五 |
|
W |
只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的 |
|
LW |
L和W可以在日期域中联合使用,LW表示这个月最后一周的工作日 |
|
# |
只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三 |
|
C |
允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一) |
表2、 Cron 表达式特殊字符意义对应表
|
字段 |
允许值 |
允许的特殊字符 |
|
秒 |
0-59 |
, - * / |
|
分 |
0-59 |
, - * / |
|
小时 |
0-23 |
, - * / |
|
月内日期 |
1-31 |
, - * ? / L W C |
|
月 |
1-12 或者 JAN-DEC |
, - * / |
|
周内日期 |
1-7 或者 SUN-SAT |
, - * ? / L C # |
|
年(可选) |
留空, 1970-2099 |
, - * / |
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,凌晨触发
其它的字符,我这里就不做实例啦,对照着特殊符号表,自己来理解吧。thanks
最后附带一个生成cron表达式的工具:http://pan.baidu.com/s/1pL7Y2uf
quartz.net 时间表达式----- Cron表达式详解的更多相关文章
- SQL Server日期时间格式转换字符串详解
本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...
- PHP用strtotime()函数比较两个时间的大小实例详解
在PHP开发中,我们经常会对两个时间的大小进行判断,但是,在PHP中,两个时间是不可以直接进行比较,因为时间是由年.月.日.时.分.秒组成的,所以,如果需要将两个时间进行比较的话,我们首先要做的就是将 ...
- 作业调度框架 Quartz 学习笔记(三) -- Cron表达式 (转载)
前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...
- Quartz.net 定时任务之Cron表达式
一.cron表达式简单介绍和下载 1.在上一篇博客"Quartz.net 定时任务之简单任务"中,我简单介绍了quartz的使用,而这篇博客我将介绍cron的具体使用(不足之处望大 ...
- Quartz学习-- quartz基本介绍和 Cron表达式
Quartz学习 一. Quartz 大致简介 Quartz 是完全由 java 开发的一个开源的任务日程管理系统 任务日程管理系统 换句话说就是: 一个预先确定的日程时间到达时,负责执行任务的 ...
- 指定时间生成cron表达式
public class CronUtils { private static final SimpleDateFormat sdf = new SimpleDateFormat("ss m ...
- js 表达式与运算符 详解(上)
表达式: 表达式是用于JavaScript脚本运行时进行计算的式子,可以包含常量.变量.运算符 <script> var r = 2 var pi = 3.14 var circle = ...
- Quartz.net开源作业调度框架使用详解
前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...
- Quartz.net开源作业调度框架使用详解(转)
前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...
随机推荐
- SSH实战 · 唯唯乐购项目(中)
用户模块 三:一级分类的查询 创建一级分类表并导入基本数据 CREATE TABLE `category` ( `cid` int(11) NOT NULL AUTO_INCREMENT, ` ...
- iframe用法
<iframe src="http://caiyanli.top/" height="500" width="500" frameb ...
- Xamarin+Prism开发详解三:Visual studio 2017 RC初体验
Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...
- C#中5步完成word文档打印的方法
在日常工作中,我们可能常常需要打印各种文件资料,比如word文档.对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作.特别是提到Web打印,这的确会很棘手.一般如果要想选 ...
- ASP.NET MVC学习之母版页和自定义控件的使用
一.母板页_Layout.cshtml类似于传统WebForm中的.master文件,起到页面整体框架重用的目地1.母板页代码预览 <!DOCTYPE html> <html> ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- 【JS基础】对象
delete 可以删除对象属性及变量 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);// ...
- SAP CRM 用户界面对象类型和设计对象
在CRM中的用户界面对象类型的帮助下,我们可以做这些工作: 进行不同的视图配置 创建动态导航 从设计层控制字段标签.值帮助 控制BOL对象的属性的可视性 从导航栏访问自定义组件 一个用户界面对象类型之 ...
- AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决
原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...