Free · no sign-up · runs entirely in your browser
Cron Expression Generator
Click the chips to build a schedule and get a valid cron string for standard crontab, Quartz and AWS EventBridge, a plain-English sentence, and the next 5 fire times in your timezone with the UTC equivalent alongside.
Build your schedule
Tap a preset or edit any of the five fields — everything recomputes instantly, there is no submit button.
Standard 5-field crontab — the other dialects are on the result card below.
Standard 5-field crontab — the other dialects are on the result card below.
Result
0 9 * * *
Paste into crontab -e, a Kubernetes CronJob "schedule:", or GitHub Actions "on.schedule.cron".
At 09:00, every day.
How it works
Three steps, no sign-up, nothing leaves your browser.
Click the chips for minute, hour, day-of-month, month and weekday — or paste a crontab, Quartz or EventBridge string and it loads back into the builder.
The same schedule is rewritten for standard crontab, Quartz (seconds first) and AWS EventBridge (with the "?" placeholder and a year field).
The next 5 fire times are computed in your timezone with the UTC equivalent alongside, so a UTC runner never surprises you.
Field reference
| Field | Range | Notes |
|---|---|---|
| Minute | 0–59 | */5 fires at :00, :05, :10 … Use 0 for exactly on the hour. |
| Hour | 0–23 | 24-hour clock: 9 means 09:00 and 17 means 17:00. |
| Day of month | 1–31 | * means every day. Combining it with a weekday triggers the OR rule. |
| Month | 1–12 or JAN–DEC | 1,4,7,10 is the first month of each quarter. |
| Weekday | 0–6 (0=Sun) or SUN–SAT | 1-5 is Monday through Friday. 7 also means Sunday in crontab. |
| Seconds (Quartz only) | 0–59 | Quartz puts seconds in front; the standard 5-field output drops it. |
FAQ
Where do I paste the generated expression?
The Standard tab is a plain 5-field crontab: use it in crontab -e, a Kubernetes CronJob schedule:, or GitHub Actions on.schedule.cron. The Quartz tab fits Spring's @Scheduled(cron = …) and the EventBridge tab fits an AWS EventBridge Scheduler ScheduleExpression.
Why does Quartz show "?" or drop my weekday?
Quartz and EventBridge cannot combine day-of-month with day-of-week: one of the two must be "?". When you restrict both here, those dialects keep the day-of-month, write "?" for the weekday and tell you so underneath the code block.
What happens with L, W or # tokens?
They are Quartz-only advanced tokens. Paste an expression containing them and the builder echoes it verbatim so you can copy it, but next-run times are not computed — the panel says so instead of guessing.
Is the timezone the same as my scheduler's?
Not necessarily. Runners are usually UTC, so every next-run row shows the UTC timestamp in muted monospace right below the local time. Pick UTC in the dropdown to plan in UTC directly.
Why does an impossible schedule say "Never fires"?
The search walks up to four years of candidate dates and stops at a hard step cap. 0 0 30 2 * can never match, so the panel reports "Never fires" with the reason instead of hanging.
Does it work offline?
Yes. Parsing, dialect conversion and the next-run maths all run in your browser with Intl — there are no network calls, no accounts, and nothing is uploaded or logged.