Cron Daylight Savings Fixer – Prevent Duplicate and Missing Job Runs
Build UTC cron expressions that run reliably through every DST change
No signup • Runs in browser • Free
During DST changes, some cron jobs fire twice and others do not fire at all. When clocks spring forward by one hour, jobs scheduled in that missing hour are skipped entirely. When clocks fall back, jobs in the repeated hour run twice. Both failures are invisible in logs until they cause a data gap, a duplicate charge, or a missed maintenance window. A cron expression built in UTC eliminates DST as a variable entirely.
The problem is that most cron daemons evaluate schedules in the server's local timezone. A job scheduled at 30 2 * * * on a server in US/Eastern will behave differently depending on whether DST is in effect. During the March "spring forward" transition, 2:30 AM never occurs — the clock jumps from 2:00 AM directly to 3:00 AM — so the job is skipped. A cron builder that generates UTC-based expressions removes the dependency on local timezone entirely.
# Local time expression — affected by DST
30 2 * * * # "run at 2:30 AM" — skipped when clocks spring forward
# runs twice when clocks fall back
# UTC equivalent for US/Eastern (EST = UTC-5, EDT = UTC-4)
30 7 * * * # "run at 07:30 UTC" — always runs, never duplicated
# Note: UTC offset for Eastern changes between EST and EDT seasons
# Use a fixed UTC time that avoids the ambiguous local-time window
Quick summary
- ✓Jobs scheduled in the missing DST hour are skipped; jobs in the repeated DST hour run twice.
- ✓UTC-based cron expressions are immune to DST changes — UTC has no clock shifts.
- ✓Simulating a schedule through DST boundaries reveals problems before they reach production.
- ✓DevToolBox tools run entirely in your browser — no signup.
What It Is
A cron expression builder generates the five-field or six-field cron syntax that schedules recurring jobs. For DST-related issues, the critical feature is the ability to build expressions in UTC rather than a local timezone — UTC never observes daylight saving time, so a UTC-based schedule is unambiguous and consistent year-round.
For systems that must schedule jobs in local time (because the job represents a business-hours action like "send the 9 AM report"), the builder should also preview the next several scheduled runs, including runs across the DST transition dates, so you can verify the job does not land in the missing or ambiguous hour.
Why Developers Use This
- SRE maintenance windows. Maintenance windows are typically scheduled during low-traffic hours. If the window is specified in local time and falls in the DST transition window, the job either runs during a different actual time or fires twice. Converting the window to UTC avoids the ambiguity.
- Financial and reporting jobs. Jobs that generate daily reports, process end-of-day transactions, or close accounting periods need to run at a consistent real-world time. DST-induced shifts cause them to run an hour early or late, misaligning with the business day they are supposed to close.
- Multi-region deployments. A job that needs to coordinate across clusters in multiple timezones is much easier to reason about when expressed in UTC. All clusters apply the same absolute time, regardless of their local timezone or DST status. See our guide on cron expression examples for the full syntax reference.
- Kubernetes CronJobs. Kubernetes CronJobs use UTC by default. If the expression was written in local time and then copied into a Kubernetes manifest without converting to UTC, the job runs at the wrong wall-clock time for half the year.
Common DST Scheduling Errors
- Scheduling during the ambiguous hour. The hour between 1:00 AM and 2:00 AM on the fall-back date occurs twice. Any job in that window runs twice — once in the first occurrence and again in the second. Schedule jobs outside this range or convert to UTC.
- Scheduling during the missing hour. The hour between 2:00 AM and 3:00 AM on the spring-forward date does not exist in local time. Jobs scheduled in that window are skipped entirely with no error or warning in most cron implementations.
- Timezone-aware cron on UTC servers. Cloud servers often run UTC by default. A cron expression written for US/Eastern that is deployed to a UTC server without adjustment runs at the wrong time all year, not just during DST transitions.
How to Use the Cron Builder
Using the DevToolBox Cron Builder to create a DST-safe schedule takes under five minutes.
- Open the cron builder in your browser. No account, no install.
- Enter the schedule you want — the frequency, day, and time.
- Select UTC as the timezone to generate a DST-immune expression.
- The builder previews the next scheduled runs — verify they land at the intended wall-clock time.
- Copy the expression into your configuration file or Kubernetes manifest.
DevToolBox tools run entirely in your browser — nothing you paste is transmitted to any server.
Frequently Asked Questions
Does running in UTC fully eliminate DST problems?
Yes — UTC has no daylight saving adjustments, so a UTC-based cron expression always maps to the same absolute time. The tradeoff is that the job's local-time representation changes with the seasons. A UTC job at 07:30 runs at 02:30 EST in winter and 03:30 EDT in summer from an Eastern perspective.
What if the job must run at a specific local time year-round?
Use a timezone-aware scheduler that accepts a timezone name (like America/New_York) rather than a UTC offset. The scheduler converts the local time to UTC accounting for DST, so the job always runs at the correct wall-clock time. Kubernetes does not support timezone-aware CronJobs natively — consider an external scheduler or a UTC time that accounts for DST offset changes.
How do I find the DST transition dates for planning?
For the US, DST transitions happen on the second Sunday of March (spring forward) and the first Sunday of November (fall back). Other countries use different dates. Check the tzdata database or IANA timezone information for exact transition dates by timezone and year.
Conclusion
DST-related job failures are predictable and preventable. Scheduling in UTC removes the clock-shift variable entirely; the job always runs at the same absolute time regardless of the season. For jobs that must run at a specific local time, using a timezone-aware scheduler — or explicitly avoiding the ambiguous and missing hours — prevents the silent duplications and skips that only surface in incident reports months later.
If you need a fast cron builder that generates UTC expressions and previews scheduled runs, DevToolBox does exactly that. DevToolBox tools run entirely in your browser — no signup, no install, nothing sent to a server.
Build DST-safe cron expressions in seconds
Generate UTC-based schedules and preview runs through DST transitions. Free, no signup, browser-only.
Open Cron Builder →