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表达式详解相关推荐
- spring定时任务 时间配置cron表达式
1.Spring quartz 1.1 单纯针对时间的设置规则 org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时 ...
- 具体时间转换cron表达式
一个具体时间转换cron表达式 示例代码 package com.alex.callback;import java.text.ParseException; import java.text.Sim ...
- el表达式ne什么意思_JSP中EL表达式的用法详解(必看篇)
EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...
- Java中Lambda表达式使用及详解
Java中Lambda表达式使用及详解 前言 一.Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中.使 ...
- Java Web中的EL(表达式语言)详解
Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容.通过EL可以简化在JSP开发中对对象的引用,从而规范页面 ...
- Quartz.Net实现作业定时调度详解
Quartz.Net实现作业定时调度详解 原文:Quartz.Net实现作业定时调度详解 1.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个 ...
- python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...
1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...
- python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...
1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...
- 中考 计算机录取 步骤,中考录取时间及录取流程详解
原标题:中考录取时间及录取流程详解 普通高中录取时间 7月9日-19日 每批次录取结束后,考试院将通知相关学校到录取现场领取<新生录取花名册> 省级示范性高中的分配生录取分数线及录取名单要 ...
- 【京准小课堂】NTP网络校时服务器(时间同步系统)参数详解
[京准小课堂]NTP网络校时服务器(时间同步系统)参数详解 [京准小课堂]NTP网络校时服务器(时间同步系统)参数详解 1.系统概述 在信息时代的今天,准确统一的时钟系统已广泛的应用在车站.医院.学校 ...
最新文章
- matlab 无序数对,MATLAB中sort函数对矩阵数进行排序
- 零基础代码学python-零基础学python之构建web应用(入门级)
- 服务器声卡图标显示x,win10电脑中桌面扬声器图标显示X标记怎么修复
- 【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )
- 文件上传检测的基本思路
- ResNext(2017)解读
- Source Insight中查看文件显示全路径
- 手机html送礼,送给家中“老顽童”的好礼物!这些手机的远程功能你会用嘛?...
- 获取鼠标图片和鼠标位置的方法
- java人机猜拳模块流程图_基于java实现人机猜拳游戏
- php 生成迅雷地址,php实现把url转换迅雷thunder资源下载地址的方法,_PHP教程
- vue--实现跑马灯效果
- Teardrop代码编程
- Hadamard矩阵和Kronecker积
- js ,DOM节点,制作点名器
- ora2pg 导出Oracle数据
- 计算机保研统计方向,北京大学统计科学中心保研申请全解析
- 宽带用户认证管理方式和技术实现探讨
- kalman简单例子——初始化参数对kalman性能的影响
- yolov5代码及原理详解