1、cron表达式(年可以为空):Seconds Minutes Hours DayofMonth Month DayofWeek [Year]
2、每一个域可出现的字符如下:
Seconds:可出现", - * /"四个字符,有效范围为0-59的整数
Minutes:可出现", - * /"四个字符,有效范围为0-59的整数
Hours:可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为1-31的整数
Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek:可出现", - * / ? L C #"八个字符,有效范围为1-7的整数或SUN,MON,TUE,WED,THU,FRI,SAT两个范围。1表示星期天,2表示星期一, 依次类推(建议写英文)
Year:可出现", - * /"四个字符,有效范围为1970-2099年
注:(
* :表示匹配该域的任意值。
- :表示范围,例如在Minutes域使用5-20,表示从5分到20分每分钟触发一次。
/ :表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分触发一次,而25,45等分别触发一次。
, :表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分触发一次。
? :只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek是相互影响的。
当DayofMonth或者DayofWeek中其中有一个是*或者确定的值,则另一个一定要是?。(这样的话两者之间必有一个是?)
L :表示最后,只能出现在DayofWeek和DayofMonth域。
在DayofMonth子表达式中,“L”表示一个月的最后一天。
在DayofWeek自表达式中,“L”表示一个星期的最后一天,也就是SAT。如果在“L”前有具体的内容(有效范围为1-7的整数或SUN,MON,TUE,WED,THU,FRI,SAT),
它就具有其他的含义了(例如:“6L”、“FRIL”表示这个月的最一个星期五)。
W :表示有效工作日(周一到周五),只能出现在DayofMonth域。是对前导日期的修饰,表示离该日期最近的工作日,系统将在离指定日期的最近的有效工作日触发事件。
(15W表示离该月15号最近的工作日)
LW :这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
C :允许在DayofMonth和DayofWeek中出现,代表“Calendar”的意思。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。
(是对前导日期的修饰)
如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。
星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。
例:DayofMonth:今天是0522,23C就会从0523开始每个月的23号触发;22C就会从0622开始每个月的22号触发。
DayofWeek:今天是星期一,1C就会下个星期天开始每个星期触发;3C就会这个星期二开始每个星期触发。
# :用于确定每个月第几个星期几,只能出现在DayofWeek域。例如在4#2,表示某月的第二个星期三。
)
3、例子练习。
如:1/40 58-59 23 ? 5,7 TUEL 2017 ;3 2/25 2 ? 5,7 TUEC 2017,2018 ;3 2/25 2 LW 5,7 ? 2017 ;3 2/25 10 3W 5,7 ? ;3 2/25 10 ? 5,7 WED#2 。