Class CronPattern

java.lang.Object
org.aoju.bus.cron.pattern.CronPattern

public class CronPattern extends Object
定时任务表达式 表达式类似于Linux的crontab表达式,表达式使用空格分成5个部分,按顺序依次为:
  1. :范围:0~59
  2. :范围:0~23
  3. :范围:1~31,"L"表示月的最后一天
  4. :范围:1~12,同时支持不区分大小写的别名:"jan","feb", "mar", "apr", "may","jun", "jul", "aug", "sep","oct", "nov", "dec"
  5. :范围:0 (Sunday)~6(Saturday),7也可以表示周日,同时支持不区分大小写的别名:"sun","mon", "tue", "wed", "thu","fri", "sat","L"表示周六

为了兼容Quartz表达式,同时支持6位和7位表达式,其中:

 当为6位时,第一位表示,范围0~59,但是第一位不做匹配
 当为7位时,最后一位表示,范围1970~2099,但是第7位不做解析,也不做匹配
 

当定时任务运行到的时间匹配这些表达式后,任务被启动 注意:

 当isMatchSecond为true时才会匹配秒部分
 默认都是关闭的
 

对于每一个子表达式,同样支持以下形式:

  • *:表示匹配这个位置所有的时间
  • ?:表示匹配这个位置任意的时间(与"*"作用一致)
  • */2:表示间隔时间,例如在分上,表示每两分钟,同样*可以使用数字列表代替,逗号分隔
  • 2-8:表示连续区间,例如在分上,表示2,3,4,5,6,7,8分
  • 2,3,5,8:表示列表
  • cronA | cronB:表示多个定时表达式
注意:在每一个子表达式中优先级:
 间隔(/) > 区间(-) > 列表(,)
 

例如 2,3,6/3中,由于“/”优先级高,因此相当于2,3,(6/3),结果与 2,3,6等价

一些例子:

  • 5 * * * *:每个点钟的5分执行,00:05,01:05……
  • * * * * *:每分钟执行
  • * 2 * * * *:每两分钟执行
  • * 12 * * *:12点的每分钟执行
  • 59 11 * * 1,2:每周一和周二的11:59执行
  • 3-18 5 * * * *:3~18分,每5分钟执行一次,既0:03, 0:08, 0:13, 0:18, 1:03, 1:08……
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
    构造
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    match(long millis, boolean isMatchSecond)
    给定时间是否匹配定时任务表达式
    boolean
    match(LocalDateTime dateTime, boolean isMatchSecond)
    给定时间是否匹配定时任务表达式
    boolean
    match(Calendar calendar, boolean isMatchSecond)
    给定时间是否匹配定时任务表达式
    boolean
    match(TimeZone timezone, long millis, boolean isMatchSecond)
    给定时间是否匹配定时任务表达式
    static List<Date>
    matchedDates(String patternStr, long start, long end, int count, boolean isMatchSecond)
    列举指定日期范围内所有匹配表达式的日期
    static List<Date>
    matchedDates(String patternStr, Date start, int count, boolean isMatchSecond)
    列举指定日期之后(到开始日期对应年年底)内所有匹配表达式的日期
    static List<Date>
    matchedDates(String patternStr, Date start, Date end, int count, boolean isMatchSecond)
    列举指定日期范围内所有匹配表达式的日期
    static List<Date>
    matchedDates(CronPattern pattern, long start, long end, int count, boolean isMatchSecond)
    列举指定日期范围内所有匹配表达式的日期
    static Date
    nextDateAfter(CronPattern pattern, Date start, boolean isMatchSecond)
    列举指定日期之后(到开始日期对应年年底)内第一个匹配表达式的日期
    返回匹配到的下一个时间
    of(String pattern)
    解析表达式为 CronPattern
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • CronPattern

      public CronPattern(String pattern)
      构造
      Parameters:
      pattern - 表达式
  • Method Details

    • of

      public static CronPattern of(String pattern)
      解析表达式为 CronPattern
      Parameters:
      pattern - 表达式
      Returns:
      this
    • nextDateAfter

      public static Date nextDateAfter(CronPattern pattern, Date start, boolean isMatchSecond)
      列举指定日期之后(到开始日期对应年年底)内第一个匹配表达式的日期
      Parameters:
      pattern - 表达式
      start - 起始时间
      isMatchSecond - 是否匹配秒
      Returns:
      日期
    • matchedDates

      public static List<Date> matchedDates(String patternStr, Date start, int count, boolean isMatchSecond)
      列举指定日期之后(到开始日期对应年年底)内所有匹配表达式的日期
      Parameters:
      patternStr - 表达式字符串
      start - 起始时间
      count - 列举数量
      isMatchSecond - 是否匹配秒
      Returns:
      日期列表
    • matchedDates

      public static List<Date> matchedDates(String patternStr, Date start, Date end, int count, boolean isMatchSecond)
      列举指定日期范围内所有匹配表达式的日期
      Parameters:
      patternStr - 表达式字符串
      start - 起始时间
      end - 结束时间
      count - 列举数量
      isMatchSecond - 是否匹配秒
      Returns:
      日期列表
    • matchedDates

      public static List<Date> matchedDates(String patternStr, long start, long end, int count, boolean isMatchSecond)
      列举指定日期范围内所有匹配表达式的日期
      Parameters:
      patternStr - 表达式字符串
      start - 起始时间
      end - 结束时间
      count - 列举数量
      isMatchSecond - 是否匹配秒
      Returns:
      日期列表
    • matchedDates

      public static List<Date> matchedDates(CronPattern pattern, long start, long end, int count, boolean isMatchSecond)
      列举指定日期范围内所有匹配表达式的日期
      Parameters:
      pattern - 表达式
      start - 起始时间
      end - 结束时间
      count - 列举数量
      isMatchSecond - 是否匹配秒
      Returns:
      日期列表
    • match

      public boolean match(long millis, boolean isMatchSecond)
      给定时间是否匹配定时任务表达式
      Parameters:
      millis - 时间毫秒数
      isMatchSecond - 是否匹配秒
      Returns:
      如果匹配返回 true, 否则返回 false
    • match

      public boolean match(TimeZone timezone, long millis, boolean isMatchSecond)
      给定时间是否匹配定时任务表达式
      Parameters:
      timezone - 时区 TimeZone
      millis - 时间毫秒数
      isMatchSecond - 是否匹配秒
      Returns:
      如果匹配返回 true, 否则返回 false
    • match

      public boolean match(Calendar calendar, boolean isMatchSecond)
      给定时间是否匹配定时任务表达式
      Parameters:
      calendar - 时间
      isMatchSecond - 是否匹配秒
      Returns:
      如果匹配返回 true, 否则返回 false
    • match

      public boolean match(LocalDateTime dateTime, boolean isMatchSecond)
      给定时间是否匹配定时任务表达式
      Parameters:
      dateTime - 时间
      isMatchSecond - 是否匹配秒
      Returns:
      如果匹配返回 true, 否则返回 false
    • nextMatchAfter

      public Calendar nextMatchAfter(Calendar calendar)
      返回匹配到的下一个时间
      Parameters:
      calendar - 时间
      Returns:
      匹配到的下一个时间
    • toString

      public String toString()
      Overrides:
      toString in class Object