CalcOak

Cron Expression Builder: write a schedule, see what it means and when it will next run

In plain English

Build it field by field

Next 5 run times

    Cron field reference
    PositionFieldAllowed valuesSpecial characters
    1Minute0–59* , - /
    2Hour0–23* , - /
    3Day of month1–31* , - /
    4Month1–12 or JAN–DEC* , - /
    5Day of week0–6 or SUN–SAT (7 = Sunday)* , - /
    • * any value; , list (1,15); - range (9-17); / step (*/15, 1-31/2).
    • If both day fields are restricted the job runs when either matches (Vixie cron behaviour).

    How to use the cron expression builder

    Start from whichever side you prefer. If you already have an expression from a crontab, a Kubernetes manifest or a GitHub Actions workflow, paste it into the box at the top and the tool parses it straight away: the plain-English sentence underneath tells you what it means, and the list further down shows the next five times it will fire. If you are starting from scratch, pick a preset such as "weekdays at 09:00" or set each of the five fields by hand. Each field offers every value, every N values, specific values you tick off, or a from-to range, and the builder and the expression box always stay in sync.

    Mistakes are flagged inline the moment they happen, with the field named and the accepted range shown, so "60 * * * *" or a six-field Quartz schedule will not slip through. Use the time zone menu to see the run times as your server will experience them; a schedule of "0 2 * * *" means 02:00 in whatever zone the daemon runs in, which for most cloud hosts is UTC rather than your local time. The Copy button puts the result on the clipboard.

    Why check a cron schedule before deploying it

    Cron syntax is compact enough that small slips look plausible. Swapping the hour and minute fields turns "run at 03:15" into "run every day at 15:03"; writing "1-5" in the day-of-month column instead of the day-of-week column schedules a job for the first five days of every month rather than Monday to Friday; and combining a date and a weekday triggers on both, not on the intersection. None of these produce an error on the server. The job simply runs at the wrong time, often for weeks before anyone notices a missing backup.

    Seeing the next five run times is the quickest sanity check there is, particularly for rare schedules where the first run may be months away. A leap-day job such as "0 0 29 2 *" is easy to write and hard to test on a live system; here you can confirm it lands on 29 February 2028 in a few seconds. The parser and scheduler run entirely in your browser, so it is safe to paste expressions that reference internal job names, and it keeps working offline once the page has loaded.

    Frequently asked questions

    What happens when both day-of-month and day-of-week are set?+

    Classic Vixie cron (the one on Linux and macOS) treats the two day fields as an OR when both are restricted. "0 9 1,15 * MON" runs at 09:00 on the 1st, on the 15th and on every Monday, not only on Mondays that fall on those dates. This page follows the same rule in its descriptions and run times, so if you want "the first Monday of the month" you need a shell test inside the job rather than a cron expression.

    Is Sunday 0 or 7?+

    Both. Vixie cron accepts 0 and 7 for Sunday, and the three-letter name SUN also works. The builder writes 0, but you can type 7 in the expression box and it will be understood, including in ranges such as 5-7 for Friday to Sunday. Note that some other schedulers (Quartz, for example) number the days 1 to 7 instead, so check the documentation of the system you are deploying to.

    Why does my schedule not have a seconds field?+

    Standard cron has five fields and runs, at most, once a minute. Six-field expressions with a leading seconds value belong to Quartz, Spring and a few other libraries, and seven-field ones add a year at the end. This tool validates strictly against the five-field format because that is what crontab, Kubernetes CronJobs, GitHub Actions and most hosting dashboards expect, and a stray sixth field is one of the most common reasons a job never fires.

    Which time zone does cron use?+

    On a server, cron uses the system time zone of the machine (or the CRON_TZ / TZ setting if it is set), and most cloud schedulers default to UTC. Pick the matching zone in the next-runs list to see the actual wall-clock times. During a daylight-saving change the tool does what a plain cron daemon does: a time that does not exist on the spring-forward night is skipped, and a time that occurs twice on the autumn night appears twice.

    Can I use names and step values together?+

    Yes. Month and weekday names (JAN-DEC, SUN-SAT, any capitalisation) can be used anywhere a number can, so "0 12 * JAN-MAR/2 *" is valid. A step after a plain number, such as "5/10" in the minute field, means "from 5 to the end of the range in steps of 10", which is how Vixie cron reads it. Lists can also mix ranges and single values, as in "1-5/2,10".