Cron Expression Generator
Describe a schedule and get the cron expression that runs it, with its next run times in the time zone you choose.
Expression
0 3 * * *
At 03:00.
- Next run
- 2026-10-10 03:00 UTC
Next runs
- Sat 2026-10-10 03:00
- Sun 2026-10-11 03:00
- Mon 2026-10-12 03:00
- Tue 2026-10-13 03:00
- Wed 2026-10-14 03:00
- Thu 2026-10-15 03:00
Say when the job should run and this writes the crontab line for it, with the next few times it will fire so that the answer can be checked rather than trusted.
How it works
A frequency decides which of the five fields are pinned and which are left open. Once an hour pins the minute; once a day pins the hour as well; once a week adds the day of the week; once a month the day of the month; once a year the month too. Several times an hour writes a step on the minute field, counted from the top of the hour.
The expression is then read back by the same parser the reader uses, and the run times and the sentence come from that reading. Nothing is asserted about the result that was not worked out from the expression itself.
Only one day field is ever pinned, so the expressions written here are never subject to cron's day rule — the one where a day matching either restriction is enough.
Examples
| Case | Input | Result |
|---|---|---|
| A nightly backup | Once a day, 03:30 | 30 3 * * * |
| Every quarter of an hour | Several times an hour, 15 minutes apart | */15 * * * * |
| A report on Monday mornings | Once a week, Monday 08:00 | 0 8 * * 1 |
Frequently asked questions
Why can I not build "every weekday at 9 and at 17"?
Because a form for every shape cron accepts is the crontab syntax again with more boxes. The frequencies here cover what most jobs need; for anything else, write the expression and check it in the reader, which explains whatever you give it.
What time zone does the expression use?
None. A crontab line carries no zone: it runs in the zone of the machine it is installed on. The zone picked here only decides which clock the next runs are shown against, so set it to the machine's to see what it will really do.
What happens if I ask for the 31st of every month?
The expression is written and cron skips the months that have no 31st. The run times show it: they jump over February, April, June, September and November.
Does "several times an hour" fire on the hour?
Yes. The step is counted from minute zero, so every 20 minutes means :00, :20 and :40. It restarts at the top of each hour, which is why a step that does not divide 60 leaves a short gap there.
Good to know
- Five-field crontab syntax. The `@daily` family and the extensions some schedulers add — a seconds field, `L`, `W`, `#` — are not written here.
- The next runs are worked out from the calendar. What a given cron daemon does across a daylight saving change is implementation specific and is not modelled.