Cron表达式

Cron 表达式提供了指定复杂时间组合的能力

Cron 表达式由 6 个必填字段和一个由空格分隔的可选字段组成。各字段分别说明如下:

字段名 允许的值 允许的表达式
0-59 , - * /
分钟 0-59 , - * /
小时 0-23 , - * /
每月的某天 1-31 , - * ? / L W
0-11 or JAN-DEC(0代表一月) , - * /
每周的某天 1-7 or SUN-SAT(1代表星期天) , - * ? / L #
年(可选) empty, 1970-2199 , - * /

表达式

* 所有 例子 每秒执行一次: * * * * * ?

- 范围 例子 1-20秒执行一次: 1-20 * * * * ?

, 枚举 例子 1和20秒执行一次: 1,20 * * * * ?

/ 间隔 例子 从1秒开始每20秒执行一次: 1/20 * * * * ?

L 最后的 例子 月份字段中的值“L”表示“月份的最后一天,“6L”表示“本月的最后一个星期五”,“L-3”,表示日历月的倒数第三天

W 允许用于日期字段。此字符用于指定离给定日期最近的工作日(周一至周五)。例如,如果您将“15W”指定为 day-of-month 字段的值,则含义是:“距该月 15 日最近的工作日”。因此,如果 15 日是星期六,触发器将在 14 日星期五触发。如果 15 日是星期日,触发器将在 16 日星期一触发。如果 15 号是星期二,那么它将在 15 号星期二触发。但是,如果您将“1W”指定为月份中的某天的值,并且 1 号是星期六,则触发器将在 3 号星期一触发,因为它不会“跳跃”超过一个月的天数。 'W' 字符只能在月中的某一天是一天而不是一个范围或日期列表时指定。

LW 可以实现本月的最后一个工作日

# 星期字段允许使用“#”字符。此字符用于指定该月的“第 n”XXX 天。例如,星期字段中“6#3”的值表示该月的第三个星期五(第 6 天 = 星期五,“#3” = 该月的第三个星期五)。其他示例:“2#1”= 本月的第一个星期一,“4#5”= 本月的第五个星期三。请注意,如果您指定“#5”并且该月中给定的星期几没有 5,则该月不会触发。如果使用“#”字符,则在星期几字段中只能有一个表达式(“3#1,6#3”无效,因为有两个表达式)。

合法字符以及月份和星期几的名称不区分大小写。

注意点

  • 对指定星期几和月份中的某天值的支持不完整(您需要在这些字段之一中使用“?”字符)。

  • 支持溢出范围 - 也就是说,左侧的数字大于右侧的数字。你可能会做 22-2 赶上晚上 10 点到凌晨 2 点,或者你可能有 11 月到 2 月。需要注意的是,过度使用溢出范围会创建没有意义的范围,并且没有努力确定 CronExpression 选择哪种解释。一个例子是“0 0 14-6 ? * FRI-MON”。

PS:源码注解翻译

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容