Cron Expression Generator & Explainer

Free cron expression generator and crontab generator: build a five-field cron schedule with the field-by-field builder, or paste an existing cron expression to get an instant plain-English description, the next 10 run times in any time zone, and copyable crontab, GitHub Actions, Kubernetes and AWS EventBridge snippets.

Presets:
Macros:

Enter a cron expression, pick a preset, or use the builder below.

to
Everystarting at
to
Everystarting at
to
Everystarting at
to
Everystarting at
to
Everystarting at
to
Everystarting at
to
Everystarting at

Plain-English description

Enter a valid expression to see its description.

Next 10 runs

Real crontab runs in the server's own time zone, not necessarily the one you pick here — check timedatectl or your host's docs.

Snippets

Crontab line
 
GitHub Actionsschedule: (always UTC, standard 5-field only)
 
Kubernetes CronJob
 
AWS EventBridgecron(), 6 fields, always UTC, no day OR rule

    Runs in your browser. Nothing you enter is sent to our servers or saved; only your format, time zone and snippet placeholders are remembered.

    How to use the cron expression generator

    • Build one: pick a format (standard, with seconds, or Quartz), then set each field to Every, Specific, Range or Step — Quartz fields add a Special mode for ?, L, W and #.
    • Paste one: type or paste an expression like */5 * * * * into the expression box — the builder, description and next run times all update to match.
    • Presets and macros: one click fills a common schedule or a @daily-style macro.
    • Next runs: pick Local, UTC or any IANA zone to see the next 10 real run times, with DST gaps and repeats flagged.
    • Snippets: copy a crontab line, a GitHub Actions block, a Kubernetes manifest, or an AWS EventBridge translation.

    Cron syntax explained

    A standard cron expression has five space-separated fields, always in this order:

    FieldAllowed valuesSpecial characters
    Minute0–59* every, , list, - range, / step
    Hour0–23
    Day of month1–31
    Month1–12 or JAN–DEC
    Day of week0–7 or SUN–SAT (0 and 7 are both Sunday)

    Some schedulers (this generator's "with seconds" format, plus most Quartz-based ones) add a seconds field before the minute, 0–59 with the same special characters. A comma-separated list like 1,15,30 picks exact values, a range like 9-17 covers every value in between, and a step like */15 or 1-30/5 fires every Nth value starting from the range's low end.

    Six shorthand macros replace the whole five-field expression: @yearly/@annually (0 0 1 1 *), @monthly (0 0 1 * *), @weekly (0 0 * * 0), @daily/@midnight (0 0 * * *) and @hourly (0 * * * *). @reboot is different — it runs once when the system starts, so it has no fixed schedule and no "next run time."

    Cron every 5 minutes (and other common intervals)

    The step character / is the cleanest way to write a recurring interval: */5 * * * * means "every 5 minutes," firing at minutes 0, 5, 10 … 55 of every hour. From 09:00 UTC on 25 September 2026, its next five runs are 09:05, 09:10, 09:15, 09:20, 09:25 UTC. The same pattern scales to any field: 0 */2 * * * is every 2 hours, and 0 9 */3 * * is 9am every 3rd day of the month.

    Common cron examples

    Every description and next-run time below is generated by the same engine as the tool above, from a fixed reference instant (09:00 UTC, 25 September 2026 — a Friday) so the table is stable:

    ExpressionMeaningNext run (from the reference instant)
    * * * * *Every minute.2026-09-25 09:01:00 UTC
    */5 * * * *Every 5 minutes.2026-09-25 09:05:00 UTC
    */15 * * * *Every 15 minutes.2026-09-25 09:15:00 UTC
    */30 * * * *Every 30 minutes.2026-09-25 09:30:00 UTC
    0 * * * *At minute 0 past every hour.2026-09-25 10:00:00 UTC
    0 0 * * *At 00:00.2026-09-26 00:00:00 UTC

    Cron time zones and DST

    A cron expression has no time zone of its own — it only becomes a real moment once you know which zone the scheduler evaluates it in. Plain crontab uses the server's own local time zone (check with timedatectl or the TZ variable); GitHub Actions always uses UTC; Quartz, Kubernetes and AWS EventBridge let you set the zone explicitly.

    Daylight saving adds two edge cases the calculator above handles automatically. On the US spring-forward date, clocks skip 2:00–3:00 AM, so 30 2 * * * (2:30 AM daily) has no 2:30 AM to run at — it runs at 02:30 EDT instead. On the fall-back date, 1:00–2:00 AM repeats, so 30 1 * * * happens twice; the tool reports the earlier occurrence and flags the second.

    Crontab vs Quartz vs GitHub Actions cron

    The five field values mean the same thing everywhere, but the surrounding rules differ enough to catch people out when porting a schedule between systems:

    SystemFieldsDay-of-month + day-of-weekTime zone
    Crontab (Vixie/cron)5 (minute…day-of-week)OR when both restrictedServer's local zone
    Cron with seconds6 (second first)OR when both restrictedServer's local zone
    Quartz6–7 (second first, optional year)Exactly one must be ?Configured per trigger
    GitHub Actions5 (standard cron)OR when both restrictedAlways UTC
    AWS EventBridge6 (minute…year, no seconds)Exactly one must be ?Always UTC

    For example, 0 9 * * 1-5 (weekdays at 9am) becomes this in a GitHub Actions workflow (always UTC, so adjust the hour first), and cron(0 9 ? * 2-6 *) as an AWS EventBridge cron() expression:

    on:
      schedule:
        - cron: '0 9 * * 1-5'

    Quartz cron expressions: ?, L, W and #

    Quartz (the scheduler behind Jenkins, Spring and many Java applications) adds a mandatory seconds field, an optional year, and four characters standard cron does not have: ? means "no specific value" and is required in whichever of day-of-month or day-of-week you leave unused; L means "last" (alone, the last day of the month; after a weekday number like 6L, the last occurrence of that weekday); W means "nearest weekday" (15W is the weekday closest to the 15th, never crossing into another month); and # picks an exact occurrence (6#3 is the third Friday of the month).

    Quartz expressionMeaning
    0 0 12 L * ?At 12:00, on the last day of the month.
    0 0 9 15W * ?At 09:00, on the weekday nearest day 15 of the month.
    0 0 17 ? * 6#3At 17:00, on the 3rd Friday of the month.
    0 0 17 ? * 6LAt 17:00, on the last Friday of the month.

    Other developer tools

    • Unix timestamp converter: convert any of the run times above between epoch seconds/milliseconds and a date, in any time zone.
    • Regex tester: cron's own field syntax is simple, but if a script that a cron job calls needs to match text, test the pattern here first.

    Frequently asked questions

    What is a cron expression?

    A short string that tells a scheduler when to run a job: five fields for minute, hour, day of month, month and day of week. Special characters * (every), , (list), - (range) and / (step) combine to describe schedules like "every 5 minutes" or "9am on weekdays" in one line.

    How do I write a cron expression for every 5 minutes?

    Use */5 in the minute field and * everywhere else: */5 * * * *. The / means "step", so */5 fires at minute 0, 5, 10 … 55 of every hour. From 09:00 UTC on the reference date used on this page, that expression's next five runs are 09:05, 09:10, 09:15, 09:20, 09:25 UTC.

    What's the difference between cron and crontab?

    Cron is the background service that runs scheduled jobs on Unix-like systems; crontab ("cron table") is the file format that lists those jobs and the command (crontab -e) used to edit it. In everyday use, "cron expression" and "crontab expression" mean the same five-field schedule string.

    What do the five fields in a cron expression mean, in order?

    From left to right: minute (0–59), hour (0–23, 24-hour clock), day of month (1–31), month (1–12 or JAN–DEC) and day of week (0–6 or 7, SUN–SAT, where both 0 and 7 mean Sunday). Some schedulers add a seconds field before the minute, and Quartz adds an optional year field after day of week.

    If I restrict both day-of-month and day-of-week, does cron match both or either?

    Standard crontab uses OR, not AND, when both fields are restricted: 0 0 1 * 1 runs at midnight on the 1st of the month OR on any Monday, whichever comes first — not only on Mondays that happen to be the 1st. This is one of cron's best-known gotchas. Quartz avoids the ambiguity by requiring exactly one of the two fields to be ? (no value).

    What is Quartz cron syntax and how is it different?

    Quartz (used by Jenkins, Spring and many Java schedulers) adds a mandatory seconds field, an optional year, and the special characters ?, L, W and # for day-of-month/day-of-week — see the Quartz section below for what each one means, with worked examples.

    What time zone does a cron expression use?

    Whatever zone the scheduler runs in — a cron expression has none of its own. Crontab uses the server's local zone (check timedatectl or TZ), GitHub Actions always uses UTC, and Quartz/AWS EventBridge let you configure it explicitly. Confirm the zone before relying on an exact time, especially around DST changes.

    Does GitHub Actions use the same cron syntax as crontab?

    Almost: GitHub Actions' schedule: trigger accepts standard 5-field cron (no seconds, no Quartz ?/L/W/#) but always evaluates it in UTC, the shortest supported interval is 5 minutes, and scheduled workflows only run on the default branch.

    How is AWS EventBridge cron different from crontab?

    EventBridge's cron() always has 6 fields (minutes hours day-of-month month day-of-week year), always runs in UTC, and — like Quartz — requires exactly one of day-of-month/day-of-week to be ? instead of crontab's OR rule. The generator's snippet translates simple expressions automatically.

    Is anything I type into this generator sent to a server?

    No. Parsing, the English description, next-run calculation and every snippet run entirely in your browser. Nothing you type is uploaded or saved, other than your chosen format, time zone and snippet placeholders (command, image name), kept on your device.

    This tool computes standard Vixie cron, 6-field-with-seconds and Quartz scheduling logic, and converts wall-clock times to real instants using your browser's IANA time zone database. Always confirm the time zone your actual scheduler runs in (crontab uses the server's own zone) before relying on an exact run time in production. Spotted a wrong result? Tell us. Last reviewed .