Home › Developer Tools › Cron Expression Explainer
Developer Tool

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.

✓
100% Free to Use Your expression is read in your browser

Cronie crontab syntax, five time fields. Not Kubernetes, GitHub Actions, Quartz or AWS syntax, which differ. Other cron programs may differ too.

0 characters

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.

How to Use the Cron Expression Explainer

  1. 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.
  2. Press Explain, or press Enter in the box. Nothing is explained while you type.
  3. 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.
  4. 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:

FieldValuesNames
Minute0 to 59None
Hour0 to 23None
Day of month1 to 31None
Month1 to 12jan to dec
Day of week0 to 7 (0 and 7 are both Sunday)sun to sat
  • * means every value in the field's range.
  • 1,15 is a list; 8-11 is an inclusive range (the first number must be at most the second).
  • */15 and 0-23/2 are 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, @midnight and @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.

Days of March 2026 (1 March is a Sunday) on which each expression runs at 00:00
ExpressionRuleDays
0 0 1,15 * 5Both restricted: either1, 6, 13, 15, 20, 27
0 0 * * 5Day of month is a star: both6, 13, 20, 27
0 0 1,15 * *Day of week is a star: both1, 15
0 0 */2 * 1Starts with *: both9, 23
0 0 1-31 * 1Not written with *: eitherEvery day
0 0 1 * 0-7Not written with *: eitherEvery 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.