Cron Expression Explainer
Paste a five-field cron expression to see what each field means, a plain-language summary and the next five matching times in UTC. It checks the syntax and says what it does not support.
Cronie crontab syntax, five time fields. Not Kubernetes, GitHub Actions, Quartz or AWS syntax, which differ. Other cron programs may differ too.
Five fields separated by spaces: minute, hour,
day of month, month, day of week. Or one alias
such as @daily. Then press Explain.
Examples
Enter an expression, or choose an example.
The text in the box changed after this was explained. Press Explain to update.
This could not be read as a cron expression
Explanation
Summary
Field by field
Notes
Nothing here needs a special note.
Next five matching times (UTC)
How to Use the Cron Expression Explainer
-
Type or paste a cron expression into the box, or choose
an example. It has five fields separated by spaces, or
it is one alias such as
@daily. - Press Explain, or press Enter in the box. Nothing is explained while you type.
- Read the summary where there is one, the meaning of each field, the notes about anything subtle, and the next five times the expression matches, in UTC.
- If the text cannot be read, the message says which field is wrong and where. Reset clears the box and the result.
Crontab Syntax at a Glance
This tool reads the crontab time syntax of the cronie project. A time has five fields:
| Field | Values | Names |
|---|---|---|
| Minute | 0 to 59 | None |
| Hour | 0 to 23 | None |
| Day of month | 1 to 31 | None |
| Month | 1 to 12 | jan to dec |
| Day of week | 0 to 7 (0 and 7 are both Sunday) | sun to sat |
*means every value in the field's range.1,15is a list;8-11is an inclusive range (the first number must be at most the second).*/15and0-23/2are steps. A step follows*or a range, and it restarts in each field.- Names are three letters in any case, in the month and day-of-week fields only.
- Aliases read here:
@yearly,@annually,@monthly,@weekly,@daily,@midnightand@hourly, written alone and in lowercase.
Refused, each with its own message: ?,
L, W, #,
~, @reboot, a step after a single
number such as 0/35, a range that runs
backwards, a sixth field, full names such as
monday, and anything that is not plain ASCII.
The tool accepts at most 256 characters, 64
per field and 3 digits per number; those are limits of this
tool, not of cron.
Day of Month and Day of Week
The two day fields are combined by a rule that surprises
many people. In cronie, if both fields are
written without a *, the command runs when
either one matches. If either field starts
with *, both must match. The
rule looks at how the field is written, not at the
days it selects.
| Expression | Rule | Days |
|---|---|---|
0 0 1,15 * 5 | Both restricted: either | 1, 6, 13, 15, 20, 27 |
0 0 * * 5 | Day of month is a star: both | 6, 13, 20, 27 |
0 0 1,15 * * | Day of week is a star: both | 1, 15 |
0 0 */2 * 1 | Starts with *: both | 9, 23 |
0 0 1-31 * 1 | Not written with *: either | Every day |
0 0 1 * 0-7 | Not written with *: either | Every day |
The cronie source describes it in a comment:
* * 1,15 * Sun runs on the first and fifteenth
and every Sunday; * * * * Sun runs only on
Sundays; * * 1,15 * * runs only on the first
and fifteenth.
Why */35 Is Not Every 35 Minutes
A step is evaluated inside its field. */35 in
the minute field means the minutes 0 and 35 of every
hour, so it runs at 10:00, 10:35, 11:00, 11:35 and so on,
which is not a 35-minute interval. The same holds for hours:
*/23 is the hours 0 and 23. If the step is
larger than the range, only the first value matches, and the
tool says so.
A step after a single number, such as 0/35, is a
syntax error in cronie. Write 0-59/35 or
*/35.
Cron Dialects Compared
The same five-field look hides real differences. This tool supports only the first column. The other columns are what each project's own documentation says, as read on 12 October 2026. A dash means this page makes no claim: check that project's documentation.
| Topic | Cronie (this tool) | Kubernetes CronJob | GitHub Actions | Quartz | AWS EventBridge Scheduler |
|---|---|---|---|---|---|
| Time fields | 5, then the command | 5 | 5 | 6 or 7: seconds first, then minutes, hours, day of month, month, day of week, and an optional year | 6, including a year |
| Day of week | 0 to 7 (0 and 7 are Sunday) or names | 0 to 6 (Sunday to Saturday) or names | 0 to 6 or SUN to SAT | 1 to 7 or SUN to SAT | 1 to 7 or SUN to SAT |
| Both day fields set | If both are written without *, either may match; if either starts with *, both must match |
— | — | Support for setting both is not complete; ? must currently be used in one |
* cannot be used in both; ? goes in the other |
? L W # |
Not supported; ? is a syntax error |
? means the same as * |
— | Supported | Supported, each in its own fields |
| Steps | After * or a range only; 0/35 is a syntax error |
After a range or * |
Documented, with the example 20/15 * * * * |
0/15 in the seconds field means 0, 15, 30 and 45 |
1/10 means every tenth minute from minute 1 |
Macros such as @daily |
Supported (@midnight is accepted by the source but not listed in the manual) |
Supported, including @midnight |
Not supported | — | — |
| Time zone | The daemon's; CRON_TZ sets one per table |
The controller's local zone unless .spec.timeZone is set |
UTC by default; a timezone key takes an IANA name |
— | UTC, or the IANA zone you choose |
| Daylight saving | Times that do not exist never match; repeated times run twice | — | — | — | A skipped time is not run in spring; a repeated time runs once in autumn; UTC is not adjusted |
Sources: the cronie manual page and source; the Kubernetes CronJob page; the GitHub Actions "Events that trigger workflows" page; the Quartz 2.3.0 CronTrigger tutorial; the AWS EventBridge Scheduler "Schedule types" page.
Time Zones and Daylight Saving
The times this tool lists are in UTC. They are not the local time of any server, and there is no time-zone choice. The scheduler that runs your job decides which zone the expression is read in, so a job that runs at 09:00 there may be a different hour here.
The cronie manual says that times which do not exist during a daylight saving change never match, and that repeated times run twice. This tool does not simulate daylight saving. "Now" is the clock of this device, read once when you press Explain. To convert an instant to other formats, use the Unix Timestamp Converter.
What This Tool Does Not Do
- It does not run, test or even read a command: only the five time fields.
- It does not read a crontab file or several lines.
- It does not build or generate expressions.
- It does not read Quartz, AWS, Kubernetes or GitHub Actions syntax as those systems do.
- It does not promise that a real scheduler runs at the times shown.
- It was checked against the cronie source and manual page. No cronie program was run to confirm it.
Cron Expression Explainer FAQ
Does this work for Kubernetes or GitHub Actions?
The syntax looks similar, but the projects differ: see the comparison above. This tool is pinned to cronie crontab syntax. A schedule written for another system can look valid here and still mean something else there.
Why does my schedule run on more days than I expected?
When the day-of-month and day-of-week fields are both
written without *, cron runs when either one
matches. 0 0 1,15 * 5 runs on the 1st, the
15th and every Friday.
What does */5 mean exactly?
Every fifth value of that field, starting at its first value. In the minute field it is 0, 5, 10 and so on up to 55, restarting in each hour.
Why is 0/5 rejected?
In cronie a step must follow * or a range.
Some other schedulers document a start value with a step,
but cronie does not read it, so the tool refuses it
rather than guess. Write 0-59/5 or
*/5.
Is my expression sent anywhere?
No. It is read by code running in your browser, and it is not uploaded, stored or put in the page address. Reloading the page clears it.