Runs in your browser · nothing is uploaded
Cron Expression Generator
This cron expression generator lets you type a five-field cron expression or edit each field, then preview the schedule in plain English and the next ten run times in any IANA time zone — including what happens around daylight-saving changes.
How a cron expression is read
A standard cron expression has five fields separated by spaces. A job runs at every minute where all the time fields match.
minute hour day-of-month month day-of-week| Field | Values | Names |
|---|---|---|
| Minute | 0–59 | — |
| Hour | 0–23 | — |
| Day of month | 1–31, L | — |
| Month | 1–12 | JAN–DEC |
| Day of week | 0–7 (0 and 7 = Sun) | SUN–SAT |
- Any value* → every minute, hour, day…
- List and range1,15 → the 1st and 15th · 9-17 → 9 through 17
- Step*/15 → 0, 15, 30, 45 · 9-17/2 → 9, 11, 13, 15, 17
- Extensions (not in classic cron)L → last day · 5L → last Friday · MON#1 → first Monday
When both day of month and day of week are restricted, the job runs if either matches — the tool labels its preview "Unix day-of-month/day-of-week OR semantics" for this reason. The tool accepts exactly five fields; a seconds field or a macro such as @daily is rejected.
Worked example
0 9 * * 1-5 reads as "At 09:00, Monday through Friday". Previewed in America/New_York from 28 October 2026, the run list crosses the end of daylight saving time on 1 November:
| Run | New York time | UTC |
|---|---|---|
| 1 | Wed, Oct 28, 09:00 EDT | Wed, Oct 28, 13:00 UTC |
| 2 | Thu, Oct 29, 09:00 EDT | Thu, Oct 29, 13:00 UTC |
| 3 | Fri, Oct 30, 09:00 EDT | Fri, Oct 30, 13:00 UTC |
| 4 | Mon, Nov 2, 09:00 EST | Mon, Nov 2, 14:00 UTC |
| 5 | Tue, Nov 3, 09:00 EST | Tue, Nov 3, 14:00 UTC |
| 6 | Wed, Nov 4, 09:00 EST | Wed, Nov 4, 14:00 UTC |
The job stays at 09:00 local time, so its UTC time moves by an hour after the change. If your server runs cron in UTC, the same expression would fire at 05:00 or 04:00 New York time instead. Always preview in the time zone your scheduler actually uses.
Cron cheat sheet with examples
Common schedules, their plain-English reading and their first run after midnight UTC on Thursday, 15 October 2026 — all generated by the tool's parser. Paste any of them into the field above to see the next ten runs.
| Expression | Meaning | First run (UTC) |
|---|---|---|
| * * * * * | Every minute | Thu, Oct 15, 00:01 UTC |
| */5 * * * * | Every 5 minutes | Thu, Oct 15, 00:05 UTC |
| */15 * * * * | Every 15 minutes | Thu, Oct 15, 00:15 UTC |
| 0 * * * * | Every hour | Thu, Oct 15, 01:00 UTC |
| 0 */2 * * * | On the hour, every 2 hours | Thu, Oct 15, 02:00 UTC |
| 0 0 * * * | At 00:00 | Fri, Oct 16, 00:00 UTC |
| 30 2 * * * | At 02:30 | Thu, Oct 15, 02:30 UTC |
| 0 9 * * 1-5 | At 09:00, Monday through Friday | Thu, Oct 15, 09:00 UTC |
| 15,45 9-17 * * 1-5 | At 15 and 45 minutes past the hour, between 09:00 and 17:59, Monday through Friday | Thu, Oct 15, 09:15 UTC |
| 0 9 * * 1 | At 09:00, only on Monday | Mon, Oct 19, 09:00 UTC |
| 0 0 * * 0 | At 00:00, only on Sunday | Sun, Oct 18, 00:00 UTC |
| 30 8 1 * * | At 08:30, on day 1 of the month | Sun, Nov 1, 08:30 UTC |
| 0 0 L * * | At 00:00, on the last day of the month | Sat, Oct 31, 00:00 UTC |
| 0 9 * * MON#1 | At 09:00, on the first Monday of the month | Mon, Nov 2, 09:00 UTC |
| 0 0 1 1,4,7,10 * | At 00:00, on day 1 of the month, only in January, April, July, and October | Fri, Jan 1, 00:00 UTC |
| 0 0 1 1 * | At 00:00, on day 1 of the month, only in January | Fri, Jan 1, 00:00 UTC |
Time zones and daylight saving
Skipped hour
30 2 * * * in New York around 14 March 2027, when clocks jump from 02:00 to 03:00. The preview shows:
- Sat, Mar 13, 02:30 EST
- Sun, Mar 14, 03:30 EDT
- Mon, Mar 15, 02:30 EDT
02:30 doesn't exist that day, so the run moves to 03:30.
Repeated hour
30 1 * * * around 1 November 2026, when 01:00–02:00 happens twice:
- Sat, Oct 31, 01:30 EDT
- Sun, Nov 1, 01:30 EDT
- Mon, Nov 2, 01:30 EST
The job runs once that day, not twice.
Where your job runs
Linux cron (cronie) uses the system time zone, or CRON_TZ if set. GitHub Actions schedules run in UTC, and the shortest interval it allows is every 5 minutes. Kubernetes CronJobs use the controller's local zone unless spec.timeZone is set.
Real daemons don't all handle the clock change the same way. cronie, for example, runs jobs from a skipped interval right after the change and doesn't repeat jobs in a repeated interval. To avoid the question entirely, schedule important jobs outside 01:00–03:00 local time, or run the scheduler in UTC.
This page is the dedicated cron tool. The Developer Toolkit also has a quick cron builder tab alongside its regex, YAML and .env tools; use this page when you need run-time previews in a specific time zone or from a chosen start date.
Sources: POSIX crontab specification (The Open Group Base Specifications, Issue 7); cronie cron(8) and crontab(5) manuals; GitHub Docs, "Events that trigger workflows: schedule"; Kubernetes documentation, "CronJob — Time zones". Checked 15 October 2026.
Frequently asked questions
What does * * * * * mean in cron?+
Five asterisks match every minute of every hour of every day, so the job runs once a minute — 1,440 times a day. The fields are, in order: minute, hour, day of month, month and day of week.
How do I run a cron job every 5 minutes?+
Use */5 * * * *. The step */5 in the minute field matches 0, 5, 10 … 55, which the tool describes as "Every 5 minutes" — 288 runs a day. For every 15 minutes use */15 * * * * (96 runs a day).
How do I schedule a job on weekdays only?+
Put 1-5 in the day-of-week field: 0 9 * * 1-5 reads as "At 09:00, Monday through Friday". Days of week run from 0 (Sunday) to 6 (Saturday), and three-letter names such as MON-FRI also work.
Is Sunday 0 or 7 in cron?+
Both. Most cron implementations, and the parser used here, accept 0 and 7 for Sunday: 0 9 * * 7 reads as "At 09:00, only on Sunday". Using 0 is the most portable choice.
What happens if I set both day of month and day of week?+
Standard Unix cron runs the job when either field matches, not both. 0 9 13 * 5 is "the 13th, or any Friday" — not "Friday the 13th". From 15 October 2026 its next runs (UTC) are Fri, Oct 16, 09:00 UTC; Fri, Oct 23, 09:00 UTC; Fri, Oct 30, 09:00 UTC. The tool previews this OR behavior so you can catch it before deploying.
Which time zone does a cron job run in?+
Classic Linux cron uses the server's system time zone; cronie also honors a CRON_TZ line in the crontab. GitHub Actions schedules always run in UTC. Kubernetes CronJobs use the controller's time zone unless you set spec.timeZone. Pick the matching IANA zone in the tool to preview real local times.
Can I use seconds, @daily or Quartz syntax?+
No. The tool checks for exactly five fields, so six- or seven-field Quartz or Spring expressions with a seconds field and macros such as @daily or @reboot are rejected. Write @daily as 0 0 * * * and @hourly as 0 * * * *.
Does it support L and # like the last Friday of the month?+
The parser accepts these extensions: 0 9 * * 5L means the last Friday of each month (next: Fri, Oct 30, 09:00 UTC; Fri, Nov 27, 09:00 UTC; Fri, Dec 25, 09:00 UTC) and MON#1 means the first Monday. Classic Linux cron and GitHub Actions don't support them, so check your scheduler before relying on them.
How do I run a cron job once a day at midnight, or every hour?+
Midnight every day is 0 0 * * * ("At 00:00"), which is what the @daily shortcut means. Every hour on the hour is 0 * * * * ("Every hour"). For the first day of every month at midnight, use 0 0 1 * * ("At 00:00, on day 1 of the month").
How do I run a job only during business hours?+
Combine an hour range with a weekday range. 0 9-17 * * 1-5 reads as "Every hour, between 09:00 and 17:00, Monday through Friday" — 9 runs each weekday, the last at 17:00. For every 30 minutes in the same window use */30 9-17 * * 1-5 ("Every 30 minutes, between 09:00 and 17:59, Monday through Friday").
What happens to cron jobs when daylight saving time changes?+
It depends on the scheduler, and jobs between 1:00 and 3:00 local time are the ones at risk. With the parser used here in America/New_York, 30 2 * * * — a time that doesn't exist on the spring-forward day — runs at 3:30 instead (Sun, Mar 14, 03:30 EDT; Mon, Mar 15, 02:30 EDT), and 30 1 * * * runs only once on the fall-back day even though 1:30 happens twice (Sun, Nov 7, 01:30 EDT; Mon, Nov 8, 01:30 EST). Other cron implementations have their own rules, so keep critical jobs out of that window or schedule them in UTC.
Is my cron expression sent anywhere?+
No. The expression is parsed and the run times are calculated in your browser. Nothing is stored or uploaded, and the expression is gone when you close the tab.
More free Northlane tools
- JSON to YAML converterYAML, regex, cron, and .env tools
- Epoch converterConvert seconds, milliseconds, or timezone-qualified dates in batches.
- Time zone converterConvert a date and time between IANA zones with daylight-saving rules.
- Base64 decodeEncode UTF-8 text or files, decode Base64, and generate file checksums.
- UUID generatorGenerate cryptographically random version 4 UUIDs individually or in bulk.
- Meta tag generatorGenerate escaped HTML metadata, canonical, Open Graph and Twitter tags.
- JSON formatterFormat, minify, validate, convert YAML and inspect object paths locally.
- Regex testerTest JavaScript patterns with highlights, capture groups and a replacement preview.
- Image to Base64Convert images to data URLs or rasterize a sanitized SVG into PNG locally.
- CSS gradient generatorCreate linear or radial gradients with color stops, opacity, CSS and PNG export.
- All toolsBrowse the full collection