4种cron表达式的说明

UNIX cron

格式

Minute Hour DayofMonth Month DayofWeek

分钟    小时  自然月中的天 月      星期中的天

它的最小单位是分钟,所以正常来说是没办法执行秒级的任务不支持年!

unix服务器上使用的cron表达式就是这个。

ScheduledExecutorService cron(jdk自带)

格式

Second Minute Hour DayofMonth Month DayofWeek

秒         分钟     时      自然月的天 月         星期中的天

其中月和星期几可以使用英文的前3个字母不支持年!

规则

字段允许值允许的特殊字符秒(Seconds)0~59的整数, - * /    4个字符分(Minutes)0~59的整数, - * /    4个字符小时(Hours)0~23的整数, - * /    4个字符日期(DayofMonth)1~31的整数(注意月的天数), - * / ? L   5个字符月份(Month)1~12的整数或者 JAN-DEC, - * /     4个字符星期(DayofWeek)0~7的整数或者 SUN-SAT (1=Mon), - * / ? L W   7个字符

说明

*:代表任何数字

,:逗号代表多个数字的间隔符    

-:代表从几到几    

/:代表每隔多长时间触发一次

?:代表只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于占位符;

L:代表Last的意思,只在日期和星期字段中使用,但它在两个字段中意思不同。L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L用在星期中,则表示星期六,等同于7

W:代表表示离该日期最近的工作日。比如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。

示例

0/1 * * * * ?    每秒钟执行一次。这里面的/就代表从0秒开始,每一秒执行一次。

0/50 * * * * ?   从0秒开始每50秒执行一次,那么它的执行时间就是0秒一次,50秒一次,紧接着下一秒的0秒一次,50秒一次,这样他们之间的间隔并不完全是50秒,这里指的是秒0到59的周期内,从0开始每50秒一次

0 0/5 * * * ?    每5分钟执行一次。秒是0,然后分钟是从0开始每5分一次,也就是0分0秒一次,5分0秒1次依次类推

5 0/5 * * * ?    0分5秒一次,5分5秒1次依次类推

0/2 * * * ?    0分内每秒一次执行60次,2分的时候每秒一次执行60次,依次类推

Scheduled cron(spring的context包中带的cron)

格式

Seconds Minutes Hours DayofMonth Month DayofWeek

秒           分钟       时       自然月的天  月        星期中的天

其中月和星期几可以使用英文的前3个字母不支持年!

注意:网上很多文章会拿Quartz的cron表达式来解释Scheduled cron,它俩是有区别的!!!

规则

字段允许值允许的特殊字符秒(Seconds)0~59的整数, - * /    4个字符分(Minutes)0~59的整数, - * /    4个字符小时(Hours)0~23的整数, - * /    4个字符日期(DayofMonth)1~31的整数(注意月的天数), - * / ?     5个字符月份(Month)1~12的整数或者 JAN-DEC, - * /    4个字符星期(DayofWeek)0~7的整数或者 SUN-SAT (0=7=Sun), - * / ?      5个字符

示例

0 0 * * * *        每天0点0分执行

*/10 * * * * *     每10秒执行一次

0 0 8-10 * * *     每天的8点、9点、10点执行

0 0 6,19 * * *     每天6点、17点执行

0 0/30 8-10 * * *  每天的8:00, 8:30, 9:00, 9:30, 10:00 and 10:30执行

0 0 9-17 * * MON-FRI 每周工作日的9到17点整点执行

0 0 0 25 12 ?    每年的12月25号0点执行

0 10,44 14 ? 3 WEB 在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。

? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。

不能同时这两个域上指定值的理由是难以解释甚至是难以理解的。基本上,假定同时指定值的话,意义就会变得含混不清了:考虑一下,如果一个表达式在日域上有值11,同时在周域上指定了 WED。那么是要 trigger 仅在每个月的11号,且正好又是星期三那天被激发?还是在每个星期三的11号被激发呢?要去除这种不明确性的办法就是不能同时在这两个域上指定值。

只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。

Quartz cron

格式

Seconds Minutes Hours DayofMonth Month DayofWeek [Year]

秒            分钟      时       自然月的天  月       星期中的天  年[可以为空]

其中月和星期几可以使用英文的前3个字母,星期可以写全名

注意:网上很多文章会拿Quartz的cron表达式来解释Scheduled cron,它俩是有区别的!!!

规则

字段允许值允许的特殊字符秒(Seconds)0~59的整数, - * /    4个字符分(Minutes)0~59的整数, - * /    4个字符小时(Hours)0~23的整数, - * /    4个字符日期(DayofMonth)1~31的整数(注意月的天数), - * / ? L C W  8个字符月份(Month)1~12的整数或者 JAN-DEC, - * /    4个字符星期(DayofWeek)1~7的整数或者 SUN-SAT (1=SUN), - * / ? L C #  8个字符年(可选)(Year)1970~2099, - * /    4个字符

特别注意:quartz星期的第一个为星期天,数值为1,星期一对应数值2

说明

特殊字符说明,逗号代表多个数字的间隔符*代表任何数字-代表从几到几/代表每隔多长时间触发一次?只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。不能同时这两个域上指定值的理由是难以解释甚至是难以理解的。基本上,假定同时指定值的话,意义就会变得含混不清了:考虑一下,如果一个表达式在日域上有值11,同时在周域上指定了 WED。那么是要 trigger 仅在每个月的11号,且正好又是星期三那天被激发?还是在每个星期三的11号被激发呢?要去除这种不明确性的办法就是不能同时在这两个域上指定值。只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。L是last的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示星期六,值为‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。L 说明了某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天。例如,当月域上指定了 JAN 时,在日域上的 L 会促使 trigger 在1月31号被触发。假如月域上是 SEP,那么 L 会预示着在9月30号触发。换句话说,就是不管指定了哪个月,都是在相应月份的时最后一天触发 trigger。不要让范围和列表值与 L 连用,虽然你能用星期数(1-7)与 L 连用,但是不允许你用一个范围值和列表值与 L 连用。这会产生不可预知的结果W只允许日期域出现。这个字符用于指定日期的最近(注意不是之后有可能是之前)工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的。“L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。#只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。C允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351