Cron Expression Decoder & Next Run
Inputs
| Cron expression | 0 9 * * 1-5 |
|---|
Cron Expression Decoder & Next Run
Parse any 5-field cron expression or @shorthand, get a plain-English description of the schedule, and see the next three UTC run times.
Inputs
Cron Expression
Results
Enter a value to see results.
Schedule
Next 3 Runs (UTC)
What is a cron expression?
A cron expression is a five-field string that schedules recurring tasks on Unix-like systems. Each field represents a unit of time, and the scheduler fires the job whenever all five fields match the current clock. The format is:
| Field | Position | Allowed values | Special characters |
|---|---|---|---|
| Minute | 1 | 0–59 | * / , - |
| Hour | 2 | 0–23 | * / , - |
| Day of month | 3 | 1–31 | * / , - |
| Month | 4 | 1–12 | * / , - |
| Day of week | 5 | 0–7 (0 and 7 = Sunday) | * / , - |
Special characters
*– matches every value in the field ("run every hour", "run every day")*/n– step; matches every nth value (e.g.,*/15in the minute field = every 15 minutes)a-b– range; matches every value from a through b inclusive (e.g.,1-5in the weekday field = Monday through Friday)a,b,c– list; matches each listed value (e.g.,1,15in the day-of-month field = the 1st and 15th)a-b/n– stepped range; e.g.,10-50/10matches 10, 20, 30, 40, 50
Common patterns
| Expression | Meaning |
|---|---|
* * * * * | Every minute |
*/15 * * * * | Every 15 minutes |
0 * * * * | At the top of every hour |
0 9 * * 1-5 | 09:00 UTC on weekdays |
30 17 * * 5 | 17:30 UTC every Friday |
0 0 1 * * | Midnight UTC on the 1st of every month |
0 0 1 1 * | Midnight UTC on 1 January every year |
0 0 * * 0 | Midnight UTC every Sunday |
@shorthands
Most cron implementations accept convenient aliases:
| Shorthand | Equivalent expression |
|---|---|
@yearly / @annually | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily / @midnight | 0 0 * * * |
@hourly | 0 * * * * |
Day-of-month and day-of-week interaction
When both the day-of-month and day-of-week fields are restricted (neither is *), cron applies OR semantics: the job fires if either condition is true. For example:
0 0 1 * 1
This fires at midnight on the 1st of every month AND on every Monday—not only on Mondays that happen to be the 1st. This behavior is specified by POSIX and is implemented by Vixie cron, the most widely deployed implementation.
If only one of the two fields is restricted, the other has no effect, and the job simply runs on every day that matches the restricted field.
How cron scheduling works
Each minute, the scheduler checks whether the current time matches all five fields. If it does, the job is triggered. Because the granularity is one minute, the smallest possible interval between two runs is one minute.
The scheduler does not "catch up" on missed runs by default. If a server is offline when a scheduled time passes, that run is skipped. Some schedulers—such as Kubernetes CronJobs—have a startingDeadlineSeconds setting to recover missed runs within a time window.
Timezone considerations
Most cron implementations interpret expressions in the server's local timezone. Servers configured to UTC will fire exactly when UTC-based expressions indicate. Servers in other timezones will shift the fire time accordingly.
Kubernetes CronJobs and GitHub Actions schedules both interpret cron expressions in UTC. This calculator shows upcoming run times in UTC; if your system uses a different timezone, adjust by the UTC offset of that zone.
Frequently Asked Questions (FAQ)
What do the five cron fields mean?
A cron expression has five space-separated fields in this order: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–7, where both 0 and 7 represent Sunday). Each field accepts a specific value, a wildcard (), a range (1-5), a step (/15), a list (1,15), or a combination such as 1-5/2. The @shorthands—@yearly, @monthly, @weekly, @daily, @hourly—expand to their equivalent five-field expressions.
How do day-of-month and day-of-week interact?
When both the day-of-month and the day-of-week fields are restricted (neither is *), cron uses OR semantics: the job runs if either condition is satisfied. For example, "0 0 1 * 1" fires on the 1st of every month AND on every Monday—not only on Mondays that fall on the 1st. If only one of the two fields is restricted, the job runs only on days that match that field.
Are the next-run times shown in my local timezone?
This calculator displays all upcoming run times in UTC. Most cron implementations—crontab on Linux, Kubernetes CronJobs, GitHub Actions schedules—interpret the expression in the server's local timezone or UTC. If your cron daemon runs in UTC, the times shown here will match exactly. If it runs in a different timezone, apply your local UTC offset to convert.