一、表达式格式

  秒数 分钟 小时 日期 月份 星期 年份(只此可为空)

  cron表达式是由空格分隔的6或7个字段组成的字符串。

二、字段取值范围

  字段可以包含任何允许的值,以及该字段允许的特殊字符的各种组合。字段如下:

字段名称

强制性

允许的值

允许的特殊字符



0-59

, - * /

分钟


0-59

, - * /

小时


0-23

, - * /



1-31

, - *?/ LW



1-12或JAN-DEC

, - * /

星期


1-7或SUN-SAT

, - *?/ L#


没有

空,1970-2099

, - * /

  

注意

1、星期里,1表示的是星期天,2表示的是星期一,以此类推,7表示的是星期六

2、?只存在于某天或某星期中,且不能同时存在(还不支持同时指定某天和星期)

3、'L'和'W'字符也可以在日期字段中组合以产生'LW',这转换为“最后一个工作日”

4、法定字符以及月份和星期的名称不区分大小写,如MON 与mon相同

5、一定要注意设置时间zone

三、特殊字符

字符

含义

使用范围

描述

举例

*

所有值

所有字段

用于选择字段中的所有值

分钟字段中的 * 表示每分钟

-

用于指定范围

所有字段

指定当前时间段位置上的一个时间范围

小时字段中的10-12表示10到12内的小时数,即小时10,11和12这三个值

多个指定的值

所有字段

多个指定的值以逗号隔开

星期几字段中的MON,WED,FRI表示 星期一,星期三和星期五

/

指定增量

所有字段

左边是开始触发时间,右边是每隔固定时间触发一次事件

秒字段中的5/15表示 秒 5,20,35和50;也可直接/20,相当于在'/'之前有'0',即表示0,20,40

?

没有特定值,不关心该字段的值

日,星期

需要在允许该字符的两个字段之一中指定某些内容而在另一个字段中则不需要时非常有用

某月的某个特定日期(例如,第10天)触发,但不关心恰好在一周的哪一天,星期几字段中可放置?

L

last,允许的两个字段的每一个中具有不同的含义

日,星期

日期字段中的值L表示月份的最后一天,在星期几字段中单独使用,则仅表示7或SAT

还可以指定从该月的最后一天开始的偏移量,例如L-3,这意味着该月的倒数第三天

W

work,用于指定最接近给定日期的工作日(周一至周五)


前后和当前最接近工作日的那天,如当天是工作日则当天触发,且不会跳过一个月的边界

指定15W作为日期字段的值,则含义为:最接近该月的15日的工作日;若指定“1W”作为日期的值,并且第1个是星期六,则将在当月的3号触发

#

指定当月的第几个星期几

星期

指定当月的第几个星期几

星期几字段中的6#3的值表示该月的第三个星期五(第6天=星期五,#3=该月份的第3个星期五)

四、示例

"0 0 12 * * ?" 每天12:00触发事件
"0 15 10 ? * *" 每天10:15触发事件
"0 15 10 * * ?" 每天10:15触发事件
"0 15 10 * * ? *" 每天10:15触发事件
"0 15 10 * * ? 2005" 2005年的每天10:15触发事件
"0 * 14 * * ?" 每天14点开始触发,每分钟触发一次,14:59分结束
"0 0/5 14 * * ?" 每天14点开始触发到14:59分结束的每5分钟触发一次事件
"0 0/5 14,18 * * ?" 每天14点开始到14:59期间和18点到18:59期间的每5分钟触发一次事件
"0 0-5 14 * * ?" 每天14点到14:05期间的每1分钟触发一次事件
"0 10,44 14 ? 3 WED" 每年3月的星期三的14:10和14:44触发一次事件
"0 15 10 ? * MON-FRI" 周一至周五的10:15触发一次事件
"0 15 10 15 * ?" 每月15日10:15触发一次事件
"0 15 10 L * ?" 每月最后一日的10:15触发一次事件
"0 15 10 ? * 6L" 每月的最后一个星期五10:15触发一次事件
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五10:15触发一次事件
"0 15 10 ? * 6#3" 每月的第三个星期五10:15触发一次事件

参考:CronTrigger Tutorial