Cron expression explainer

Read a five-field cron expression, or one with seconds, and see the next runs.

Runs locally in your browser. Nothing is uploaded.

Five fields: minute hour day month weekday. Add seconds at the front for six.

How to read an expression

A standard cron expression has five fields: minute, hour, day of month, month, and day of week. This page also accepts a leading seconds field, which makes six fields, and an optional year at the end. Type the expression or start from a preset. The summary is a sentence, the table restates each field, and the list below is the next run times in the zone you pick. The zone matters because the fields are wall-clock fields. A job at 09:30 in UTC is not 09:30 in Asia/Kolkata. Use the time zone converter when you need to present that instant to someone in another region.

Stars mean every value. A step such as */15 in the minute field means 0, 15, 30, and 45. Ranges and lists work, and month and weekday names are accepted. 0 and 7 both mean Sunday, and 1 means Monday, which is the usual cron numbering. Quartz’s question mark is read as “no specific value,” the same as a star for matching. The shortcuts @hourly, @daily, @weekly, @monthly, and @yearly expand to the familiar five-field forms.

Days, and what this page does not claim

When both the day-of-month and the day-of-week are restricted, a date matches if either field matches. That is the traditional cron rule. When one of them is a star or a question mark, only the other field restricts the day. So 30 9 * * 1-5 is 09:30 on Monday through Friday, and 0 0 1 * * is midnight on the first of every month.

The letters L and W, and the # nth-weekday syntax used by some Quartz calendars, are rejected with a message. Those forms are easy to misread and they differ between schedulers. If your expression uses them, this page will say so instead of guessing. Next-run times walk the civil clock in the selected zone and skip a wall time that does not exist because of a daylight-saving gap. An overlap can produce two instants for one civil minute.

The list is a forecast from the rules above, not a promise from your production scheduler. Containers, systemd timers, and cloud schedulers add their own timezone settings and their own definitions of “the next minute.” Read the summary, then confirm the next run against the system that will actually fire.

Common questions

Why did my job not run at the time in the list?

The server may be using UTC while you read the expression as local time, or the scheduler may be Quartz with a different weekday numbering when you used a digit instead of a name. Names such as MON avoid that particular trap. Also check that the process is running and that a previous run is not still holding a lock.

Is Sunday 0 or 1?

Here, Sunday is 0, and 7 is accepted as Sunday too. Monday is 1. Some Quartz defaults number Sunday as 1. Prefer MON, TUE, and the other names when you copy an expression between systems.

What does @daily expand to?

It expands to 0 0 * * *, which is 00:00 every day in the zone you selected. @hourly is minute 0 of every hour.

Are expressions uploaded?

No. Parsing and the next-run walk happen in the browser. A schedule is rarely secret, but the same rule applies as for the other tools: the text stays on the device.