Cron 表达式

来源:互联网 发布:大数据时代质量管理 编辑:程序博客网 时间:2024/06/16 14:13

                  最近在调研Quartz,而Quartz使用到了类似于Linux下的Cron 表达式定义时间规则,所以来学习一下!大笑

                        首先Cron 是一个字符串,由6个(或者7个)由空格分割的时间字段组成,如下图所示:

   位置     时间域名              可选值            允许的特殊字符     1   秒(Second)     0-59       , -  * /     2   分(Minutes)        0-59       , -  * /     3   时(Hour)          0-23       , -  * /     4   日(DayofMonth)     1-31       , -  * ? /  L W C     5   月(Month)         1-12       , -  * /     6   周(DayofWeek)       1-7       , -  *  ? /  L  C  #     7   年(Year 可选)  空值或1970-2099     , -  * /



            为什么说Cron表达式 是由6个 或7个 字段组成的呢?相信大家看完表格就知道了,因为 这个时间域名是可选的。

            下面来讲讲 Cron表达式中特殊字符的含义:

    • 星号(*): 可用在所有的时间字段上,表示每一个时刻, 例如,* 在秒字段时,表示“每秒”;
    • 减号(-): 表示一个范围,例如, 10-12 在 小时字段 ,表示 10点到12点,即 10,11,12;
    • 逗号 (,)  : 表示一个列表值,例如在小时字段中使用 10,11,12  ,表示 10点到12点;
    • 问号 ( ? ) :  问号这个字符  只在日期和星期字段中使用,例如想在每月的10日触发调度,不管10日到底是星期几,则只能使用如下写法: *   *  15  20  *  ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
    • 斜杠 ( / ) :  x/y 表示一个等长的序列,x为起始值,y为步长(递增值,就是每次都加一个 y), 例如在秒字段 5/3, 表示 5,8,11,14...., 也可以使用*/y,他表示0/y(从0开始)。
    • L : 只在日期和星期字段中使用代表“Last”的意思L 在日期字段中表示当前月的最后一天,如一月的 31号,非闰年二月的28号;

      如果L用在星期中,则表示星期六,等同于7。但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后 X天”,例如,6L表示该月的最后星期五;

    • 井号 ( # ):该字符只能在星期字段中使用,表示当月某个工作日。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发;

    • LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日

    • W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如15W表示离该月15号最近的工作日,如果该月15号是星 期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨 月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围



              以下是一些常用的Cron表达式:

                  

                    0 0 10,14,16  *  *  ?             每天上午10点,下午2点,4点                    0 0/30 9-17  *  *  ?               朝九晚五工作时间内每半小时                    0 0 12  ?  *  WED                表示每个星期三中午12点                    0 0 12   *  *  ?                       每天中午12点触发                    0 15 10  ?  *  *                     每天上午10:15触发                           0/3 * * * * ?                          每3秒触发一次






1 0