Corn表达式【定时任务】


Cron表达式

前言

不知道各位在平时有没有注意到一些关于定时器的场景?比如说’支付火车票的计时支付,打游戏是的天梯实时排名,等等等。

这些都是与Cron表达式息息相关。那我们就会像,为什么可以实现出定时或者延时执行某一项任务的功能呢?

这一切都与Cron表达式脱不了干系,说到底,到底什么是Cron表达式?

一、 什么是Corn表达式

在了解什么是Cron表达式之前,我们先来看看Cron表达式到底长什么样子:

img

这里可以明显的看出,Cron表达式就是有一些数字、字符组成的表达式。

有点像正则表达式,第一次接触到cron表达式的时候我就以为是正则表达式。

二、Cron表达式的结构分析

大家看到上面的Cron表达式后,脑海里是不是浮现出一堆的*,可以看出来上面的几个表达式中都包含有*

img

**你个**,丢你老🈚,

不要着急,请往下看,我们慢慢攻破它

言归正传,玩笑归玩笑,接下来来正式了解下什么是Cron表达式

组成部分含义取值范围
第一部分Seconds(秒)0-59
第二部分Minutes(分)0-59
第三部分Hours(时)0-23
第四部分Day-of-Month(秒)1-31
第五部分Month(月)0-11
第六部分Day-of-Week(星期)1-7
第七部分Year(年)可选1970-2099

在这里插入图片描述

如上图所示:这里映入眼帘的首先是这7个※,我这里从左往右,依次使用ABCDEFG这七个字母来来定义,分别代表的意义是秒、分钟、小时 天数、月数、星期数、年数

这里可能有的小伙伴就要问了,为什么不是秒、分钟、小时、天数、月数、年数、星期数?原因就在于Cron表示式目的是为了定时执行某一段程序代码,最常用的也就是到月份,试问有谁写的代码让他跑一年呢?有哪个用户为了达到目的等一年结果?不可能的对不对。

三、Cron表达式的具体含义

了解了Cron表达式额度结构,那么我们接下来就是要掌握Cron表达式每一个子结构所表达的含义,以及要能够熟练应用他

3.1 符号释义

Cron表达式有三种:

  1. *:表示所有可能的值,即表示任意一个单元(在秒位就是一秒,在分位就是一分)
  2. /:表示数值的增量,简单地说,比如在分钟为协商0/5,则它的含义就表示为从0分钟开始,每隔5分钟。所以你可以理解为每隔一段时间
  3. ?:仅用在天(月)和天(周),表示不指定值,当其中一个有值时,另外一个需要设为?

3.2 个字段所允许的值

秒:0-59 , - * /
  • 26:表示第26秒
  • 5,16,27:表示第5秒、第16秒和第27秒
  • 1-5:表示从1秒到5秒,就是1 2 3 4 5 秒
  • *:表示每一秒
  • 2/15:表示从第2秒开始,每隔15秒,就是2 17 32 47 秒
分:0-59 , - * /

根据上述的秒,同理可得

  • 26:表示第26分钟
  • 5,16,27:表示第5分钟、第16分钟和第27分钟
  • 1-5:表示从1秒到5分,就是第1 2 3 4 5 分钟
  • *:表示每一分钟
  • 2/15:表示从第2分钟开始,每隔15分钟,就是2 17 32 47 分钟
时:0-23 , - 4* /
  • 10:表示早上10点
  • 22:表示晚上10点
  • 2,8,18,23:表示凌晨2点,早上8点,傍晚6点和晚上11点
  • 9-17:表示朝九晚五,就是9 10 11 12 13 14 15 16 17 点
  • *:表示每小时
  • 10/2:表示从早上10点开始,每隔2小时
天(月):1-31 , - * / ? L W C
  • 31:表示31号(注意有的月份是没有31号的)
  • 5,10,15:表示5号、10号和15号
  • 8-17:表示8号到17号
  • *:表示所有可能的值(当指定为星号时,天(周)需指定为?)
  • 5/9:表示从5号开始,每隔9天
  • ?:当天(周)指定任意值的时候,天(月)需要设置为?
  • L:表示一个月中的最后一天
  • 6L:表示倒数第6天
  • 15W:W指工作日,如果15号不是周六日,则表示15号当天;如果15号是周六,则表示14号;如果15号是周日,则表示16号;如果31W是周日,则31W表示29号(周五),不会跨月
  • LW:指最后一个工作日
  • 15C:表示第15天(不是很明白这个,使用15和15C貌似效果相同?)
月:1-12 , - * /
  • 10:表示10月份
  • 5,10,11:表示5月份、10月份和11月份
  • 4-8:表示4月份到8月份
  • *:表示所有可能的值
  • 5/2:表示从5月份开始,每隔2个月,(就是5 7 9 11 次年5 次年7 次年9…)
  • 1-12:也可以用JAN-DEC表示
天(周):MON-SAT , - * / ? L C #
  • MON:表示周一
  • MON,TUE,FRI:表示周一,周二和周五
  • MON-FRI:表示从周一到周五
  • MON-WED,SAT:表示从周一到周三,和周六(就是周一、周二、周三和周六)
  • mon,tue,wed,thu,fri,sat,sun:表示周一到周日(大小写均可,取星期英文前三个字母,注意星期四是thu,而不是thur)
  • 7L:表示最后一个周六(效果等同于SATL)(L表示last最后的意思,7表示周六,6表示周五,类推,1表示周日)
  • 6C:表示周五以及之后包含周五的日期(感觉效果FRI一样,具体还没深究)
  • 7#2:表示第二个周六(#前面的数字表示星期,1表示周日,2表示周一,以此类推;#后面的数字表示第几个)
年:留空 2020-2099 , - * /
  • 2050:表示2050年
  • 2020,2030,2040:表示2020年、2030年和2040年
  • 2020-2030:表示2020年到2030年
  • *:表示所有可能的值
  • 2020/10:表示从2020年开始,每隔10年,(就是2020,2030,2040…)

练习

这里提供一个在线转化的网站,在线Cron表达式生成器 (qqe2.com)

我刚开始学习的时候就在这上面进行练习的。

​ (1)0 0 2 1 * ? * 每个月一号的凌晨两点
  (2)0 15 10 ? * MON-FRI 周一到周五的10点15
  (3)0 15 10 ? 6L 2002-2006 2002年-2006年最后6月的10点15
  (4)0 0 10,14,16 * * ? 每天的10点、14点、16点
  (5)0 0/30 9-17 * * ? 每天的9点到17点 每隔30分钟
  (6)0 0 12 ? * WED 每个周三的中午十二点
  (7)0 0 12 * * ? 每天的中午十二点
  (8)0 15 10 ? * * 每天的10点15
  (11)0 15 10 * * ? 2005 2005年的每天上午10:15触发
  (12)0 * 14 * * ? 每天下午2点-2点59 每隔一分钟
  (13)0 0/5 14 * * ? 每天下午2点-2点55 每隔5分钟
  (14)0 0/5 14,18 * * ? 每个月18号下午2点-2点55 每隔5分钟
  (15)0 0-5 14 * * ? 每天下午2点-2点55 每隔5分钟
  (16)0 10,44 14 ? 3 WED 三月周三下午2点10、2点44
  (17)0 15 10 ? * MON-FRI 周一到周五 每天10点15
  (18)0 15 10 15 * ? 每个月15号10点15
  (19)0 15 10 L * ? 每个月最后一天的10点15

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@WAT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值