Class CronExpression

java.lang.Object
org.springframework.scheduling.support.CronExpression

public final class CronExpression extends Object
Representation of a crontab expression that can calculate the next time it matches.

CronExpression instances are created through parse(String); the next match is determined with next(Temporal).

Supports a Quartz day-of-month/week field with an L/# expression. Follows common cron conventions in every other respect, including 0-6 for SUN-SAT (plus 7 for SUN as well). Note that Quartz deviates from the day-of-week convention in cron through 1-7 for SUN-SAT whereas Spring strictly follows cron even in combination with the optional Quartz-specific L/# expressions.

Since:
5.3
Author:
Arjen Poutsma
See Also:
  • Method Details

    • parse

      public static CronExpression parse(String expression)
      Parse the given crontab expression string into a CronExpression. The string has six single space-separated time and date fields:
       ┌───────────── second (0-59)
       │ ┌───────────── minute (0 - 59)
       │ │ ┌───────────── hour (0 - 23)
       │ │ │ ┌───────────── day of the month (1 - 31)
       │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
       │ │ │ │ │ ┌───────────── day of the week (0 - 7)
       │ │ │ │ │ │          (0 or 7 is Sunday, or MON-SUN)
       │ │ │ │ │ │
       * * * * * *
       

      The following rules apply:

      • A field may be an asterisk (*), which always stands for "first-last". For the "day of the month" or "day of the week" fields, a question mark (?) may be used instead of an asterisk.
      • Ranges of numbers are expressed by two numbers separated with a hyphen (-). The specified range is inclusive.
      • Following a range (or *) with /n specifies the interval of the number's value through the range.
      • English names can also be used for the "month" and "day of week" fields. Use the first three letters of the particular day or month (case does not matter).
      • The "day of month" and "day of week" fields can contain a L-character, which stands for "last", and has a different meaning in each field:
        • In the "day of month" field, L stands for "the last day of the month". If followed by an negative offset (i.e. L-n), it means "nth-to-last day of the month". If followed by W (i.e. LW), it means "the last weekday of the month".
        • In the "day of week" field, dL or DDDL stands for "the last day of week d (or DDD) in the month".
      • The "day of month" field can be nW, which stands for "the nearest weekday to day of the month n". If n falls on Saturday, this yields the Friday before it. If n falls on Sunday, this yields the Monday after, which also happens if n is 1 and falls on a Saturday (i.e. 1W stands for "the first weekday of the month").
      • The "day of week" field can be d#n (or DDD#n), which stands for "the n-th day of week d (or DDD) in the month".

      Example expressions:

      • "0 0 * * * *" = the top of every hour of every day
      • "*/10 * * * * *" = every ten seconds
      • "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day
      • "0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day
      • "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day
      • "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
      • "0 0 0 25 12 ?" = every Christmas Day at midnight
      • "0 0 0 L * *" = last day of the month at midnight
      • "0 0 0 L-3 * *" = third-to-last day of the month at midnight
      • "0 0 0 1W * *" = first weekday of the month at midnight
      • "0 0 0 LW * *" = last weekday of the month at midnight
      • "0 0 0 * * 5L" = last Friday of the month at midnight
      • "0 0 0 * * THUL" = last Thursday of the month at midnight
      • "0 0 0 ? * 5#2" = the second Friday in the month at midnight
      • "0 0 0 ? * MON#1" = the first Monday in the month at midnight

      The following macros are also supported.

      • "@yearly" (or "@annually") to run un once a year, i.e. "0 0 0 1 1 *"
      • "@monthly" to run once a month, i.e. "0 0 0 1 * *"
      • "@weekly" to run once a week, i.e. "0 0 0 * * 0"
      • "@daily" (or "@midnight") to run once a day, i.e. "0 0 0 * * *"
      • "@hourly" to run once an hour, i.e. "0 0 * * * *"
      Parameters:
      expression - the expression string to parse
      Returns:
      the parsed CronExpression object
      Throws:
      IllegalArgumentException - in the expression does not conform to the cron format
    • isValidExpression

      public static boolean isValidExpression(@Nullable String expression)
      Determine whether the given string represents a valid cron expression.
      Parameters:
      expression - the expression to evaluate
      Returns:
      true if the given expression is a valid cron expression
      Since:
      5.3.8
    • next

      @Nullable public <T extends Temporal & Comparable<? super T>> T next(T temporal)
      Calculate the next Temporal that matches this expression.
      Type Parameters:
      T - the type of temporal
      Parameters:
      temporal - the seed value
      Returns:
      the next temporal that matches this expression, or null if no such temporal can be found
    • equals

      public boolean equals(@Nullable Object other)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Return the expression string used to create this CronExpression.
      Overrides:
      toString in class Object