Cron Expression Generator
Build, read and check cron schedules — Unix, Kubernetes, Quartz, Spring and AWS — with the next run times in any time zone.
Every 15 minutes, from 09:00 through 17:45, on weekdays.
- Minute
*/15 - Hour
9-17 - Day of month
* - Month
* - Day of week
1-5
36 runs on each day it runs
In the other dialects
- Kubernetes
- */15 9-17 * * MON-FRI
- Quartz
- 0 */15 9-17 ? * MON-FRI
- Spring
- 0 */15 9-17 * * MON-FRI
- AWS
- cron(*/15 9-17 ? * MON-FRI *)
City data: GeoNames (CC BY 4.0)
Type a cron expression, or build one field by field, and the tool says in plain English when it runs, lists the next runs in the time zone the scheduler uses beside your own, and rewrites it for the other dialects. It reads five dialects, which differ in more than their number of fields: crontab, Kubernetes CronJobs, Quartz, Spring's @Scheduled and Amazon EventBridge.
The rules that catch people out are spelled out where they apply: two day fields that cron combines with OR, a step that restarts each hour, a schedule that can never run, and what each scheduler does when the clocks change. Everything is worked out in your browser.
Using it
- Dialect — pick the scheduler the expression is for. Picking another rewrites the expression for it to run at the same times, or keeps it as typed and says why when that dialect has no form of it.
cron(…)orrate(…)switches to AWS and seven fields to Quartz, with a note; an expression the chosen dialect cannot read, but another can, offers a button to read it as that one. - The reading and the fields — the schedule in a sentence, then each field on its own, the one the cursor is in highlighted. Macros such as
@dailyshow what they stand for. - Presets and the builder — Start from a preset writes a common schedule in the current dialect; Edit field by field opens a builder that sets each field to every value, every n, specific values or a range, and the text and the builder follow each other. A field the builder cannot show, such as
L, is left to the text. - Runs in — the time zone the scheduler uses, UTC by default, as most servers keep. The next 5 runs, or 25 on request, are listed with the date and time there, and in your own time zone when it differs. A link to the page carries the expression, the dialect and this zone.
- In the other dialects — the same schedule for each other scheduler, or why it has no equivalent there.
How the dialects differ
- Unix (cron, cronie, crontab, GitHub Actions) — 5 fields: minute, hour, day of month, month and day of week. Days of the week 0–7, Sunday 0 or 7.
- Kubernetes (Kubernetes CronJob (robfig/cron)) — 5 fields: minute, hour, day of month, month and day of week. Days of the week 0–6, Sunday 0.
- Quartz (Quartz Scheduler (Java)) — 6 or 7 fields: second, minute, hour, day of month, month, day of week and year (optional). Days of the week 1–7, Sunday 1. One day field must be ?, the other set.
- Spring (Spring @Scheduled) — 6 fields: second, minute, hour, day of month, month and day of week. Days of the week 0–7, Sunday 0 or 7.
- AWS (Amazon EventBridge rules and EventBridge Scheduler) — 6 fields: minute, hour, day of month, month, day of week and year. Days of the week 1–7, Sunday 1. One day field must be ?, the other set.
Every dialect takes *, lists (1,15), ranges (9-17), steps (*/15, 10-30/5) and three-letter names for months and days in any case. Kubernetes, Quartz, Spring and AWS also take a start with a step, 5/15, which cron writes 5-59/15. Quartz, Spring and AWS add L (the last day of the month, or 5L the last Thursday in Quartz numbering), W (15W, the weekday nearest the 15th, never crossing into another month), and # (6#3, the third Friday in Quartz). Quartz reads a reversed range such as 22-2 as running past midnight. cron reads a day-of-week range ending in 0 as ending on Sunday, so FRI-SUN runs Friday to Sunday; the others reject a reversed range.
The two day fields. When both day of month and day of week are restricted, cron runs on days that match either: 30 4 1,15 * 5 runs on the 1st, the 15th and every Friday. cron treats a field starting with * as unrestricted, so 0 0 */2 * 1 runs only on odd days that are Mondays; Kubernetes treats only a plain * or ? that way, so the same line runs on odd days and on every Monday. Spring runs only on days that match both, and Quartz and AWS refuse both, which is why one of their day fields must be ?.
Steps restart. A step counts within its field, so */7 in the minute field runs at 0, 7 … 56 and then at 0 again: 4 minutes apart at the top of each hour. The reading says so whenever a step does not divide its field.
Clock changes. Runs are found by stepping through dates and times in the Runs in zone, so they follow its daylight saving rules. A run due in a skipped or repeated hour is marked with what that scheduler does. cron runs a fixed-time job from a skipped hour as the clocks change and runs it once in a repeated hour, while a job with * in its minute or hour field follows the clock: none in the gap, twice in the overlap. Kubernetes, Spring and EventBridge Scheduler skip a time that does not exist; Quartz runs it the length of the gap later. In a repeated hour EventBridge Scheduler runs once; Kubernetes, Quartz and Spring do not document it, and the tool says so. The search looks five years ahead, as robfig/cron does.
Examples
Every 15 minutes in office hours on weekdays
- Dialect: Unix, Runs in: UTC
- */15 9-17 * * 1-5
- Reading
- Every 15 minutes, from 09:00 through 17:45, on weekdays.
- Next runs from Monday 5 January 2026, 00:00 UTC
Mon 5 Jan 09:00 Mon 5 Jan 09:15 Mon 5 Jan 09:30 Mon 5 Jan 09:45
The hour range covers 17:00 to 17:59, so the last run of the day is at 17:45, not 17:00.
Quartz: the last weekday of the month
- Dialect: Quartz, Runs in: UTC
- 0 0 18 LW * ?
- Reading
- At 18:00, on the last weekday of the month.
- Next runs from Monday 5 January 2026, 00:00 UTC
Fri 30 Jan 18:00 Fri 27 Feb 18:00 Tue 31 Mar 18:00 Thu 30 Apr 18:00
LW takes the last day of the month and moves back to Friday when it falls at a weekend. The day of week is ?, as Quartz requires.
AWS EventBridge in New York
- Dialect: AWS
- cron(0 18 ? * MON-FRI *)
- Reading
- At 18:00, on weekdays.
- Next runs, Runs in: UTC
Mon 5 Jan 18:00 Tue 6 Jan 18:00
- Next runs, Runs in: New York (America/New_York)
Mon 5 Jan 18:00 Tue 6 Jan 18:00
- In cron
- 0 18 * * MON-FRI
An EventBridge rule runs in UTC, so 18:00 there is early afternoon in New York. EventBridge Scheduler takes a time zone, and then the same expression runs at 18:00 New York time all year, moving with daylight saving.
Common schedules
| Schedule | Unix | Quartz | AWS |
|---|---|---|---|
| Every minute. | * * * * * | 0 * * * * ? | cron(* * * * ? *) |
| Every 5 minutes. | */5 * * * * | 0 */5 * * * ? | cron(*/5 * * * ? *) |
| Every hour at minute 0. | 0 * * * * | 0 0 * * * ? | cron(0 * * * ? *) |
| At 00:00. | 0 0 * * * | 0 0 0 * * ? | cron(0 0 * * ? *) |
| At 06:30, on weekdays. | 30 6 * * 1-5 | 0 30 6 ? * MON-FRI | cron(30 6 ? * MON-FRI *) |
| At minute 0, from 09:00 through 17:00, on weekdays. | 0 9-17 * * 1-5 | 0 0 9-17 ? * MON-FRI | cron(0 9-17 ? * MON-FRI *) |
| At 00:00, on Sundays. | 0 0 * * 0 | 0 0 0 ? * SUN | cron(0 0 ? * SUN *) |
| At 00:00, on the 1st. | 0 0 1 * * | 0 0 0 1 * ? | cron(0 0 1 * ? *) |
| At 00:00, on the 1st, in January. | 0 0 1 1 * | 0 0 0 1 1 ? | cron(0 0 1 1 ? *) |
Sources
Each dialect follows its scheduler's own documentation and, where that is silent, its source code: cronie and Debian cron for Unix, robfig/cron v3 as Kubernetes uses it, Quartz's CronExpression, Spring's CronExpression, and the EventBridge user guide. Kubernetes rejects CRON_TZ= and TZ= in a schedule and takes the zone in .spec.timeZone; the tool says so when one is typed.
Sources
- crontab(5) and cron(8) — cronie
- cron(8) — Debian
- CronJob — Kubernetes
- robfig/cron v3 — robfig
- Cron Trigger Tutorial — Quartz Scheduler
- CronExpression — Spring Framework
- Setting a schedule pattern for scheduled rules (legacy) in Amazon EventBridge — Amazon Web Services
- Schedule types in EventBridge Scheduler — Amazon Web Services
- Events that trigger workflows: schedule — GitHub
Reviewed
Frequently asked questions
timezone. The shortest interval is every 5 minutes, and runs can be delayed at busy times, the start of each hour above all.See also
- Unix Timestamp Converter — to turn a run time into a Unix timestamp, or read one from a log.
- Time Zone Converter — to see a run time across several cities at once.