Cron Timezone Converter
Convert a cron schedule to another timezone — DST handled honestly with dated dual expressions, entirely on this device.
0 timezones — type to filter, pick from the list, or enter a UTC offset like +05:30.
The converted schedule appears here.
Press ? for shortcuts
Do it offline:$ TZ=UTC date -d 'TZ="Asia/Kolkata" 09:00'
How to use it
- Paste or type the cron expression — five fields, or six with seconds; macros like @daily are accepted.
- Pick the source and target zones. IANA names autocomplete, and UTC offsets such as +05:30 work too.
- Read the result: one converted expression when an exact one exists, or a dated table of two when DST forces a switch.
- Copy the expression, download the .txt report, or share a permalink that restores the whole conversion.
Convert a cron schedule from one timezone to another without being wrong half the year. This tool projects every firing of your expression across a full year, applies both zones' UTC offsets under current IANA rules, and only prints an expression it has re-verified run for run. When daylight saving makes one line impossible, you get a dated two-line table instead of a quiet lie. Everything runs on this device.
How it works
The converter computes every firing of your expression for a whole year in the source zone, then maps each instant into the target zone using the offset-transition list of the current IANA Time Zone Database. No fixed offset is ever assumed between two zones.
From those projected instants it reconstructs candidate cron fields, then verifies the candidate by iterating it in the target zone and comparing both firing sets instant for instant. An expression that fails verification is never shown.
Zones that observe daylight saving change offset mid-year, so one crontab line often cannot reproduce the schedule. The tool then factors the year at each transition into two expressions with the exact dates each is valid — and when even two dated lines cannot match every instant, it says so plainly.
Examples
0 9 * * * Asia/Kolkata → UTC30 3 * * *India Standard Time is UTC+05:30, so the signature half-hour shift appears: 09:00 IST is 03:30 UTC, and the minute field moves to 30.
0 9 * * * America/New_York → UTC0 14 * * * (standard time) 2026-01-01 – 2026-03-08, 2026-11-01 – 2027-01-02
0 13 * * * (daylight time) 2026-03-08 – 2026-11-01New York changes offset twice in 2026 (March 8 and November 1), so no single UTC line matches year-round — the honest answer is two expressions with the dates each is valid.
0 9 * * * America/Sao_Paulo → UTC0 12 * * *Brazil abolished daylight saving in 2019, so São Paulo stays at UTC-03:00 all year and one expression is exact for every run.
0 9 * * * Asia/Kathmandu → UTC15 3 * * *Nepal uses the rare +05:45 offset — the projection lands the minute field on 15, which quick head-math usually gets wrong.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Day and weekday fields can shift
A conversion that crosses midnight moves the calendar day: 23:30 Monday in Tokyo is 14:30 Monday UTC, but 01:00 Tuesday in Auckland lands on Monday UTC — the day-of-week field itself changes. Day fields are rewritten from the projection and the change is flagged in the result notes.
Sub-hour offsets versus minute steps
A step schedule such as */20 9 * * * converted across a half-hour offset spills over an hour boundary, and one line can no longer hold it. The result is two always-active expressions to install together — or an explicit refusal when even two cannot reproduce the schedule exactly.
Current rules only
Projection uses the timezone rules your browser ships today. Historical offsets and future rule changes decided by governments are out of scope; re-check schedules when the IANA database changes a zone you depend on.
Fixed offsets never follow DST
Entering +05:30 instead of Asia/Kolkata pins a constant offset. That is exact for zones without daylight saving, but for a zone that observes it the offset silently drifts an hour for part of the year — prefer the named zone.
Common errors
Field 3 (day of month): '32' is outside 1–31- Each field has a fixed range; the error names the field position and the value that breaks it, so the fix is one glance away.
Expected 5 fields (minute hour day-of-month month day-of-week), or 6 with leading seconds — found 4.- Classic cron needs exactly five fields. A six-field form is accepted as seconds-first; anything else is refused before conversion.
Source zone "Asia/Klkata" is not a known IANA timezone or UTC offset — try "Europe/London" or "+05:30".- Zone names must exist in the IANA database — typos are named verbatim, and plain UTC offsets are accepted as a fallback.
@reboot runs once at system startup, not on a wall-clock schedule — there is nothing to convert between timezones.- Only wall-clock schedules can move between zones; @reboot has no calendar time at all.
This schedule never matches a real date — checked 8 years from 2026.- Dates like February 31 pass field validation but never occur; the tool scans eight years forward before declaring that honestly.
FAQ
Does cron handle daylight saving time?
No. Classic cron daemons evaluate the machine's local wall clock, so a job at 09:00 keeps firing at 09:00 local — its UTC instant silently moves when the offset changes, and jobs scheduled inside the skipped or repeated hour can be lost or doubled. This page projects a full year of firings so those shifts become visible dates instead of surprises.
Why do I get two cron expressions instead of one?
Because the source and target zones do not keep a constant offset to each other. While one zone observes daylight saving, the converted wall time differs from the rest of the year, and no single five-field line can encode a date-dependent switch — so you get each expression with the exact dates it is valid.
Which timezone does my crontab run in?
By default, the system timezone of the machine running the cron daemon. Some crons honor a TZ or CRON_TZ variable inside the crontab, and timezone-aware schedulers such as Kubernetes CronJobs take an explicit timeZone field — check the cited references for the exact rules of yours.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Re-run the conversion now.
- s
- Swap the source and target zones and re-run — the pair is the direction.
- ⌘/Ctrl + S
- Download the conversion report as .txt.
- ⌘/Ctrl + C
- Copy the converted expression when nothing is selected.
- ⌘/Ctrl + Shift + C
- Copy the converted expression even while a selection exists.
- t
- Switch the theme (single-key guards apply).
- ? or ⌘/Ctrl + /
- Open the keyboard-shortcut help overlay.
- Esc
- Close the topmost dialog; the input always stays.