Cron Expression Explainer

Translate the expression into plain language and see when it actually runs

5 campos (Unix) ou 6 campos (Spring @Scheduled / Quartz, com segundos). Atalhos como@daily também funcionam.

Significado

A cada 15 minutos de cada hora, todos os dias.

Campos

CampoValorIntervaloCorresponde a
Minuto*/150–590, 15, 30, 45
Hora*0–23todos
Dia do mês*1–31todos
Mês*1–12 ou JAN–DECtodos
Dia da semana*0–7 ou SUN–SATtodos

Próximas 5 execuções

UTC

  1. Seg, 21/09/2026 20:45em 3 minutos e 2 segundos
  2. Seg, 21/09/2026 21:00em 18 minutos e 2 segundos
  3. Seg, 21/09/2026 21:15em 33 minutos e 2 segundos
  4. Seg, 21/09/2026 21:30em 48 minutos e 2 segundos
  5. Seg, 21/09/2026 21:45em 1 hora e 3 minutos

Horários no fuso do seu navegador. Um servidor em UTC vai disparar em outro horário — verifique o fuso da máquina que executa o agendamento.

Cron Expression Explainer — read the schedule before you deploy it

A cron expression is dense by design: five or six space-separated fields decide when a backup runs, when a report is sent, or when a reprocessing job hits production. Reading 0 0 1 * 1 from memory and getting it right is harder than it looks — and the cost of being wrong only surfaces later, in production. This tool translates the expression into plain language and projects the real next runs, entirely in your browser.

How to use it

  1. Paste or type the expression — the explanation updates as you type.
  2. Check the field table to see exactly which values each position matches.
  3. Read the next runs with the relative countdown beside them. If the first date isn't what you expected, the expression is wrong.
  4. Use the examples as a starting point for the most common schedules.

The fields of a cron expression

PositionFieldRange
1 (6-field only)Second0–59
2Minute0–59
3Hour0–23
4Day of month1–31
5Month1–12 or JAN–DEC
6Day of week0–7 or SUN–SAT (0 and 7 both mean Sunday)

Syntax accepted in each field

Unix (5 fields) versus Spring and Quartz (6 fields)

This is the trap that causes the most incidents. Unix crontab works at minute resolution and uses five fields. Spring's @Scheduled and Quartz add a seconds field at the front, for six in total. Copying an expression from a crontab article straight into a @Scheduled annotation shifts every field by one position: what was the minute becomes the second, and the job starts running hourly instead of once a day. This tool detects which of the two formats you typed and warns you when it reads the expression as six fields.

The OR rule between day of month and day of week

When both day fields are something other than *, cron combines them with OR, not AND. The expression 0 0 1 * 1 does not mean "the first Monday of the month": it fires on the 1st of every month and also on every Monday. To restrict it properly, leave one of the two fields as* and do the extra check inside the job itself.

Timezone: where the schedule really runs

Cron has no timezone of its own — it uses whatever the running process has. A UTC container, a server inAmerica/Sao_Paulo and your laptop produce three different results for the same expression. The simulation on this page uses your browser timezone, shown above the list; compare it against your production environment (in Spring, the zone attribute of @Scheduled) before calling the schedule correct.

Shorthands

Everything runs in your browser

The expression is never sent to a server. All parsing and date projection happen locally, which matters when the expression comes out of a production configuration file.

Frequently Asked Questions

Common questions about cron expressions, formats and timezones

What is a cron expression?

A cron expression is a short string that describes a recurring schedule. Each field represents a unit of time — minute, hour, day of month, month and day of week — and the scheduler fires the task whenever the current moment matches every field.

What is the difference between 5-field and 6-field cron?

Classic Unix cron (crontab) uses 5 fields: minute, hour, day of month, month and day of week. Spring (@Scheduled) and Quartz use 6 fields, adding seconds at the front. The same string can mean completely different things in each format — "0 0 12 * * *" is noon in Spring but is not even valid in a crontab.

What does */15 mean in a cron expression?

The slash defines a step. "*/15" in the minute field means "every 15 minutes starting from zero" — minutes 0, 15, 30 and 45. Steps also work inside a range: "10-30/5" matches minutes 10, 15, 20, 25 and 30.

Why does my cron job run more often than expected?

Most likely the OR rule between day of month and day of week. When both fields are restricted at the same time — for example "0 0 1 * 1" — cron fires on the 1st of the month OR on every Monday, not only when both conditions coincide. To genuinely restrict it, leave one of the two as an asterisk.

Which timezone does cron use?

The timezone of the server or container running the scheduler, not the one on your machine. This is the most common cause of jobs firing at the wrong hour: a job set to 03:00 on a UTC machine runs at 00:00 in Brazil time. This tool simulates in your browser timezone — compare it with your production environment before trusting the result.

Does this tool support the Quartz L, W and # modifiers?

No. The Quartz extensions for "last day of month" (L), "nearest weekday" (W) and "nth weekday" (#) are not supported, and the tool says so instead of guessing — a wrong explanation of a schedule is worse than no explanation at all.