Cron next-run calculator with DST report
Pick a dialect, a time zone and a start date, and list the next runs. The report below the list shows what the schedule does around each daylight saving change, and which products document that behaviour and which do not.
| # | Local time | Offset | UTC | In |
|---|
How this dialect handles daylight saving time
Daylight saving changes in this time zone
History and favourites (stored only in this browser)
Nothing saved yet. Expressions you check are saved here, in your browser's local storage, never on a server.
Runs locally. The expression is never uploaded. The share link keeps it after the # sign, which browsers never send to a server.
How to use
- Choose the dialect and enter the expression. The calculator accepts every dialect on this site, so you can compare how the same job behaves in different systems.
- Type the IANA time zone of the schedule, for example
America/New_York. A zone without daylight saving, such asAsia/JakartaorUTC, never has a gap or an overlap. - Enter a start date in that zone, for example
2026-03-07 12:00, to look at a particular period instead of the present. Runs start strictly after that moment. - Read the list. Each run shows its local time, UTC offset and the equivalent UTC time, so a repeated local time is visible as two lines with different offsets.
- Open the daylight saving report under the tool. It lists the next four clock changes in the zone and the runs within six hours either side of each, as this dialect would produce them.
Worked examples
In 2026 New York moves its clocks forward on Sunday 8 March (02:00 becomes 03:00) and back on Sunday 1 November (02:00 becomes 01:00). The lists below use those dates.
Fixed time inside the gap: 02:30 on Linux
For a fixed-time job, cron(8) says a job skipped by a forward change runs immediately afterwards, so on 8 March the 02:30 job runs at 03:00. This is the manual's description of cronie; crontab(5), in the same package, says missing times never match, so the two pages disagree and this tool marks the behaviour as unclear.
Linux / Vixie cron, time zone America/New_York, runs after 2026-03-07 12:00 UTC30 2 * * *
Sun 2026-03-08 03:00:00 -04:00Mon 2026-03-09 02:30:00 -04:00Tue 2026-03-10 02:30:00 -04:00
Fixed time inside the overlap: 01:30 on Linux
cron(8) says a fixed-time job is not repeated after a backward change, so it runs once, at the first 01:30 (-04:00). crontab(5) says repeated hours run twice.
Linux / Vixie cron, time zone America/New_York, runs after 2026-10-31 12:00 UTC30 1 * * *
Sun 2026-11-01 01:30:00 -04:00Mon 2026-11-02 01:30:00 -05:00
A frequent job: every 30 minutes
*/30 * * * * starts its minute field with a star, so cron(8) treats it as a job that is scheduled normally. During the repeated hour it keeps its rhythm in real time: the 01:00 and 01:30 runs happen once at -04:00 and once at -05:00.
Linux / Vixie cron, time zone America/New_York, runs after 2026-11-01 04:00 UTC*/30 * * * *
Sun 2026-11-01 00:30:00 -04:00Sun 2026-11-01 01:00:00 -04:00Sun 2026-11-01 01:30:00 -04:00Sun 2026-11-01 01:00:00 -05:00Sun 2026-11-01 01:30:00 -05:00Sun 2026-11-01 02:00:00 -05:00
Quartz in the overlap
Observed with Quartz 2.3.2 on JDK 17: 0 30 1 * * ? fires once, at the second occurrence of 01:30 (-05:00), where Linux fires at the first.
Quartz, time zone America/New_York, runs after 2026-10-31 12:00 UTC0 30 1 * * ?
Sun 2026-11-01 01:30:00 -05:00Mon 2026-11-02 01:30:00 -05:00
Summary of what each system does
| Scheduler | Skipped hour (spring forward) | Repeated hour (fall back) | Where it comes from |
|---|---|---|---|
| AWS EventBridge Scheduler | Skipped that day | Runs once, at the first occurrence | Documented |
| GitHub Actions | Advances to the next valid time (02:30 runs at 03:00) | Not documented; the tool shows one run, at the first occurrence | Gap documented, overlap unclear |
| Kubernetes CronJob | Skipped that day | Runs twice | Observed on robfig/cron v3.0.1; Kubernetes docs are silent |
| Quartz | Skipped that day | Fires once, at the second occurrence | Observed on Quartz 2.3.2, JDK 17; docs say only "skip or repeat" |
| Linux cron, fixed time | Runs just after the change | Runs once | cron(8); contradicted by crontab(5), so unclear |
| Linux cron, minute or hour field starts with * | Skipped | Runs again | crontab(5) and cron(8); cron.c source |
Limits & gotchas
- Only some rows are documented. The AWS Scheduler rules and GitHub's spring-forward rule are in the vendor's documentation. The Kubernetes and Quartz rows are what we saw when running the real libraries (robfig/cron v3.0.1 and Quartz 2.3.2), which can change in a later version. The Linux row combines two manual pages that disagree.
- Gaps longer than an hour. cron(8) says its special handling applies to time changes of under three hours. Some zones have made changes of other sizes (for example half an hour at Lord Howe Island). The calculator uses the zone's rules from your browser's time zone data, but we have not checked every unusual zone against each scheduler.
- Your browser's time zone data matters. The calculator uses the browser's Intl time zone database. A very old browser may not know a recent rule change that a server has.
- It cannot see your server. A Linux machine might run in a different zone than you expect (for example UTC in a container) and Kubernetes without
timeZoneuses the controller's zone. - Scheduled instants only. Actual start times can lag: GitHub warns of delays under load, and AWS of several seconds.
FAQ
What is the difference between a gap and an overlap?
A gap is the hour that is skipped when clocks move forward, for example 02:00 to 03:00 in New York on 8 March 2026: times such as 02:30 never exist that day. An overlap is the hour repeated when clocks move back, for example 01:00 to 02:00 on 1 November 2026: 01:30 happens twice. Schedulers decide differently what to do in each case.
Does a job at 02:30 run on the day clocks spring forward?
It depends on the scheduler. AWS EventBridge Scheduler skips it for that day (documented), GitHub Actions runs it at 03:00 (documented), Kubernetes and Quartz skip it (observed, not documented), and cronie's cron(8) manual says a fixed-time job runs immediately after the change. The tables on this page show each one.
How do I avoid the problem completely?
Run the job in UTC, which has no daylight saving, or schedule it at a time that is never inside the skipped or repeated hour of your zone, such as 04:15. If a job must run exactly once per calendar day, also make it idempotent so that a second run is harmless.
Can I start the list from a date in the past or future?
Yes. Type a start date and time like 2026-03-07 12:00 in the "Start from" box, which is read in the time zone you chose. Leave it empty to start from now. The daylight saving report under the list always looks at the next four changes after the start.
Why does my result differ from another cron calculator?
Because the dialects genuinely differ: day-of-week numbering, the OR rule for the two day fields, the ? character, seconds and year fields, and the treatment of clock changes. Select the dialect that your scheduler uses, and read the notes where this tool says a behaviour is observed or unclear rather than documented.
Sources
- Linux man-pages (cronie): crontab(5) Used for: Field list, day-of-month/day-of-week OR rule, steps, names, CRON_TZ, @-nicknames, the DST sentence about missing and repeated times, */N restarts each period.
- Linux man-pages (cronie): cron(8): Daylight Saving Time and other time changes Used for: Changes under three hours: fixed-time jobs run immediately after a skipped hour and are not repeated after a fallback; frequent jobs run normally.
- cronie (source code): src/cron.c and src/entry.c Used for: How cronie treats jobs whose minute or hour field starts with * ("wildcard" jobs) during clock changes, and how the day-of-month/day-of-week OR is implemented.
- Amazon Web Services: Schedule types in EventBridge Scheduler Used for: Time zones (IANA), 60-second precision, daylight saving rules (skip in the gap, once in the overlap), cron expression fields.
- GitHub Docs: Events that trigger workflows: schedule Used for: UTC default, optional IANA timezone, 5-minute minimum, delays at the start of every hour, default-branch only, 60-day inactivity disable on public repositories, unsupported @-macros, DST spring-forward rule, five-field syntax and operators.
- Kubernetes: CronJob Used for: Schedule syntax, "?" = "*", macros, .spec.timeZone, CRON_TZ/TZ rejection, concurrencyPolicy, startingDeadlineSeconds, 100 missed schedules rule, 52-character name limit.
- robfig/cron (Go): cron v3 package documentation Used for: The library Kubernetes uses. Documents CRON_TZ and warns that jobs scheduled during daylight-saving leap-ahead transitions will not run.
- Quartz Scheduler: CronTrigger Tutorial (2.3.0) Used for: Field table, special characters (? L W # and L-n, LW), examples, the rule that day-of-week and day-of-month cannot both be specified, DST caution.
Every document above was opened and read on 2026-10-01. Documentation changes; if a page here disagrees with the current docs, trust the docs and tell us.