Cron Expression Generator and Parser

Runs locally

Decode cron expressions in plain English and preview the next runs.

0
Minute
0-59
9
Hour
0-23
*
Day of month
1-31
*
Month
1-12 or JAN-DEC
1-5
Day of week
0-6 or SUN-SAT
At 09:00 AM, Monday through Friday

Next 8 runs

Shown in your local timezone.

115 Oct 2026, 09:00:00
216 Oct 2026, 09:00:00
319 Oct 2026, 09:00:00
420 Oct 2026, 09:00:00
521 Oct 2026, 09:00:00
622 Oct 2026, 09:00:00
723 Oct 2026, 09:00:00
826 Oct 2026, 09:00:00

Presets

Guide

The cron rule that catches almost everyone

Five fields: minute, hour, day-of-month, month, day-of-week. The trap is what happens when you restrict both day fields at once. When day-of-month and day-of-week are both something other than *, Vixie cron — and therefore Linux, and therefore most schedulers — runs the job when EITHER matches, not both. To turn a run time into the epoch seconds a log shows, use the Unix timestamp converter.

So 0 0 13 * 5 does not mean "midnight on Friday the 13th". It means midnight on the 13th of every month, and also midnight every Friday. If you want Friday the 13th you need a day-of-week-only schedule plus a date check inside the job.

Expression

30 2 * * 1-5

0 */4 * * *

0 0 13 * 5

15 9 1 * *

What it actually does

02:30, Monday to Friday

Every 4 hours: 00:00, 04:00, 08:00,
12:00, 16:00, 20:00

Every 13th of the month AND every
Friday — not Friday the 13th

09:15 on the 1st of every month
Field order and the values each one accepts
PositionFieldRangeNotes
1Minute0–59*/15 gives :00, :15, :30, :45
2Hour0–2324-hour clock; no AM/PM, no 24
3Day of month1–31A job set for the 31st skips short months entirely
4Month1–12 or JAN–DECNames are case-insensitive but not portable everywhere
5Day of week0–7 or SUN–SATBoth 0 and 7 mean Sunday

Where people get caught

Daylight saving eats and duplicates jobs

A job scheduled at 02:30 local time runs twice on the day the clocks go back and not at all on the day they go forward. Anything in the 01:00–03:00 window should run in UTC, or be made idempotent.

Steps do not wrap around the end of a field

*/7 in the day-of-month field restarts at 1 each month, so the gap between the 29th and the next run is not seven days. Steps are only evenly spaced inside a single field cycle.

Five fields or six is a different expression

Unix cron takes five fields; Quartz, Spring and several cloud schedulers put seconds first and take six or seven. A five-field expression pasted into Spring shifts every field by one and runs at a time you did not ask for.

Cron does not read your shell profile

No PATH from .bashrc, no nvm, no locale, often no HOME. A script that works in your terminal and silently fails under cron is almost always an absolute-path problem. Log stdout and stderr somewhere you will look.

An overrunning job gets a second copy, not a queue

If the run takes longer than the interval, cron simply starts another. Wrap the command in flock, or make the job take a lock itself, before you schedule anything every minute.

The weekday abbreviations are not a schedule

0 9 * * 1-5 is weekdays. 0 9 * * 1,5 is Mondays and Fridays. The comma and the dash are one character apart and produce very different on-call weeks.

About the cron expression parser

How it works in 4 steps · 4 common use cases · 4 questions answered

How it works

  1. 1.Paste a cron expression, or start from one of the presets.
  2. 2.Read the plain-English description of what it means, with each of the five fields broken out and its valid range shown.
  3. 3.Check the next eight run times, in IST, SAST, UTC or your local timezone.
  4. 4.Adjust a field and watch the description and the schedule update immediately.

Common use cases

  • •Confirming what an inherited cron line in a Kubernetes CronJob actually does
  • •Checking that a nightly job in UTC lands at the intended local hour in India or South Africa
  • •Writing a new schedule and verifying the next runs before deploying it
  • •Explaining a schedule to someone who does not read cron syntax

FAQ

Which cron format does it use?

The standard five-field format: minute, hour, day of month, month, day of week. That is what Linux cron, Kubernetes CronJobs and most CI schedulers accept.

Why does my expression run more often than I expected?

Almost always because day-of-month and day-of-week are both set to something other than *. Standard cron treats those two as OR, not AND, so the job fires on either match.

Are seconds supported?

No. Six-field expressions with a leading seconds column are a Quartz and Spring extension, not standard cron, and are not parsed here.

Does it handle daylight saving time?

The preview uses the timezone rules your browser has, so a schedule shown in a zone that observes DST reflects the shift. IST and SAST do not observe DST at all.