ConverterNew

Cron Expression Generator with Next Run Times

Build, explain and test cron expressions, with the next run times in UTC and your timezone

100% client-side — your data never leaves your browserNo data stored or uploadedFree for lifetime · No signup
0
minute
9
hour
*
day (month)
*
month
1-5
day (week)

At 09:00, on Monday through Friday.

Quartz (6-field):

Build a schedule

Run
Hour
Minute
Next 10 runs

Calculating…

Schedules are evaluated in the timezone of the machine running cron. GitHub Actions and Kubernetes CronJobs (unless spec.timeZone is set) use UTC.

Cron syntax in one table

A standard cron expression has five fields separated by spaces, read left to right: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or JAN-DEC) and day of week (0-6 or SUN-SAT, where 7 is also Sunday). A crontab line then adds the command to run after the five fields.

Each field accepts the same operators. * means every value. A comma makes a list: 1,15 in day of month is the 1st and 15th. A hyphen makes a range: 1-5 in day of week is Monday through Friday. A slash adds a step: */15 in minutes is 0, 15, 30 and 45, and 0-30/10 is 0, 10, 20 and 30. Names are case-insensitive, so MON-FRI and mon-fri are the same. Paste any expression above and the field strip under the input shows which value landed in which field.

Special strings: @daily, @hourly, @reboot

Most cron implementations (Vixie cron, cronie, and many libraries) accept shorthand macros in place of the five fields. @yearly or @annually is 0 0 1 1 *, @monthly is 0 0 1 * *, @weekly is 0 0 * * 0 (midnight on Sunday), @daily or @midnight is 0 0 * * *, and @hourly is 0 * * * *.

@reboot is different: it runs once when the cron daemon starts, which is usually at boot. It has no calendar schedule, so this tool explains it but shows no next run times. Not every scheduler supports the macros: GitHub Actions and Kubernetes CronJobs accept the five-field form, and Kubernetes also accepts the @ macros except @reboot.

Common cron examples

*/5 * * * * runs every 5 minutes. 0 * * * * runs at the top of every hour. 0 0 * * * runs daily at midnight. 0 9 * * 1-5 runs at 09:00 Monday through Friday. 30 2 * * 0 runs at 02:30 every Sunday, a typical backup slot. 0 0 1 * * runs at midnight on the first day of every month. 0 9-17 * * 1-5 runs on the hour during business hours. 0 0 1 1 * runs once a year on January 1st.

There is no standard way to say "last day of the month" in five-field cron. The usual workaround is to schedule days 28-31 and check the date in the command, for example 0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && ./run.sh (note the escaped % that crontab requires).

The day-of-month and day-of-week OR gotcha

When both day of month and day of week are restricted (neither is *), cron runs when EITHER field matches, not when both match. 0 0 13 * 5 does not mean "Friday the 13th"; it means every 13th of the month and every Friday. If either field is *, the other one alone decides, which is the behaviour people usually expect. This tool applies the same rule to its next-run list and shows a warning when an expression falls into the OR case. Quartz avoids the ambiguity by requiring ? in one of the two fields.

Quartz cron expressions

Quartz (Java), Spring's @Scheduled, AWS EventBridge and several other schedulers use a different format: six or seven fields, with seconds first and an optional year last, for example 0 15 10 ? * MON-FRI. Quartz numbers days of the week 1-7 as SUN-SAT instead of 0-6, requires ? in either day of month or day of week, and adds L (last), W (nearest weekday) and # (nth weekday, such as 6#3 for the third Friday).

Paste a 6- or 7-field expression and this tool detects it, converts the day-of-week numbers, applies the year field, and notes that seconds are not shown. Expressions using L, W or # are recognised but cannot be converted, because standard cron has no equivalent. For any standard expression, the Quartz line under the explanation gives the equivalent six-field form to paste into Spring or Quartz.

Timezones: GitHub Actions and Kubernetes run in UTC

Cron evaluates the schedule in the timezone of the machine (or container) running it, which on most servers is UTC. GitHub Actions schedule triggers always use UTC, and scheduled runs can be delayed by several minutes during busy periods. Kubernetes CronJobs use the kube-controller-manager's timezone, which is UTC in practice, unless you set spec.timeZone (stable since Kubernetes 1.27) to an IANA name like Europe/Berlin.

Daylight saving time causes the other surprises. If your server runs in a timezone with DST, a job at 02:30 can be skipped on the night clocks spring forward, because 02:30 never happens, and an hour can repeat in autumn. Vixie cron runs fixed-time jobs only once in the repeated hour; this tool does the same. Switch the timezone selector above between UTC and your own zone to see exactly when each run lands.

How to use the Cron Expression Generator with Next Run Times tool

  1. 1

    Paste or build an expression

    Paste a cron expression into the input, click a preset, or choose a frequency, time and days in the builder.

  2. 2

    Read the explanation

    The plain-English line describes the schedule, with warnings for the day-of-month/day-of-week OR rule and Quartz differences.

  3. 3

    Check the next run times

    Choose whether the cron daemon runs in UTC or your timezone and see the next 5 or 10 runs in both.

  4. 4

    Copy or share

    Copy the five-field expression or its Quartz equivalent, or copy a link that reopens the page with the same expression.

Frequently asked questions

What does */15 * * * * mean?

Every 15 minutes: at minutes 0, 15, 30 and 45 of every hour, every day. The */n step always counts from the start of the field's range, so */15 never runs at minute 5 or 20.

Why does my cron job run on the wrong day?

Usually one of two things. If you set both day of month and day of week, cron runs when either matches, so 0 0 1 * 1 runs on the 1st AND on every Monday. Otherwise, check the timezone: a job at 0 0 * * * on a UTC server runs at midnight UTC, which is the previous evening in the Americas.

What is the difference between cron and Quartz expressions?

Quartz adds a seconds field at the start and an optional year at the end, numbers weekdays 1-7 starting with Sunday, requires ? in one of the two day fields, and supports L, W and #. Standard cron has five fields and weekdays 0-6. Paste either format above and the tool explains it.

Does this tool send my expression anywhere?

No. Parsing, the explanation and the next-run calculation are plain JavaScript running in your browser. The shareable link stores the expression in the URL fragment, which browsers do not send to the server.

Can cron run a job every 90 minutes or every 2 weeks?

Not with a single standard expression, because steps reset at the end of each hour or month. Use two lines (0 0-21/3 * * * and 30 1-22/3 * * * give every 90 minutes), or schedule weekly and have the script skip alternate weeks by checking the ISO week number.

Related on TechLogHub

Get the next tool before you need it

One email a week: new and trending developer tools, fresh comparisons, and what shipped. Unsubscribe in one click.