cron表达式

含义

domain field value character
seconds 0-59 , - * /
minutes 0-59 , - * /
小时 hours 0-23 , - * /
日期 day of month 1-31 , - * ? / L W C
月份 month 1-12 , - * /
星期 day of week 1-7 , - * ? / L C #
年(optional) year 1970-2099 , - * /

每个域都可以用数字表示,但是还可以出现如下特殊字符。

  • * : 表示匹配该域的任意值。比如Minutes域使用*,就表示每分钟都会触发。
  • - : 表示范围。比如Minutes域使用 10-20,就表示从10分钟到20分钟每分钟都会触发一次。
  • , : 表示列出枚举值。比如Minutes域使用1,3,就表示1分钟和3分钟都会触发一次。
  • / : 表示间隔时间触发(开始时间/时间间隔)。例如在Minutes域使用 5/10,就表示从第5分钟开始,每隔10分钟触发一次。
  • ? : 表示不指定值。简单理解就是忽略该字段的值,直接根据另一个字段的值触发执行。
  • # : 表示该月第n个星期x(x#n),仅用星期域。如:星期:6#3,表示该月的第三个星期五。
  • L : 表示最后,是单词”last”的缩写(最后一天或最后一个星期几);仅出现在日和星期的域中。用在日则表示该月的最后一天,用在星期则表示该月的最后一个星期。如:星期域上的值为5L,则表示该月最后一个星期的星期四。在使用’L’时,不要指定列表’,’或范围’-‘,否则易导致出现意料之外的结果。
  • W: 仅用在日的域中,表示距离当月给定日期最近的工作日(周一到周五),是单词”weekday”的缩写。

比如:”4W”表示距离4号最近的工作日(当月的)触发;

(1)当4号就是工作日时,则表示当天触发;当4号为周六时,则表示3号(周五)触发;

(2)当4号为周日时,则表示在5号(周一)触发;

比如:”1W”表示距离1号最近的工作日触发事件,但是,该工作日只算当月的。假如当月1号是周六,则”1W”表示在当月3号(周一)触发。就算上个月的最后一天是工作日,也不会触发。

  • LW: ‘L’和’W’可以一起组合在日字段使用。表示当月的最后一个工作日触发事件。

Reference

https://zhuanlan.zhihu.com/p/163050320