Package org.springframework.scheduling.support

# 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:
  - `CronTrigger`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`equals(Object other)`
`int`
`hashCode()`
`static boolean`
`isValidExpression(String expression)`
Determine whether the given string represents a valid cron expression.
`<T extends Temporal & Comparable<? super T>>
T`
`next(T temporal)`
Calculate the next `Temporal` that matches this expression.
`static CronExpression`
`parse(String expression)`
Parse the given crontab expression string into a `CronExpression`.
`String`
`toString()`
Return the expression string used to create this `CronExpression`.

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## 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 "`n`th-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`