Paste a cron line, pick a time zone, see what it means and when it runs next (daylight-saving aware).
Every 30 minutes.
2026-11-08T04:30:00-05:002026-11-08T05:00:00-05:002026-11-08T05:30:00-05:002026-11-08T06:00:00-05:002026-11-08T06:30:00-05:002026-11-08T07:00:00-05:002026-11-08T07:30:00-05:002026-11-08T08:00:00-05:002026-11-08T08:30:00-05:002026-11-08T09:00:00-05:00Add the next runs to a calendar (.ics)
The list above follows systemd timer rules. cron daemons and Kubernetes don't always agree with it (measured here). Times within 3 hours of each change where they differ:
Same in all three.
| When | systemd timer | cronie | Kubernetes CronJob |
|---|---|---|---|
| 01:00 (UTC-05:00) – 01:30 (UTC-05:00), 2 times | — | runs | runs |
curl 'https://cron.wickkit.cc/?e=*/15+9-17+*+*+1-5&tz=Europe/Berlin&n=5' curl 'https://cron.wickkit.cc/api?e=@weekly&tz=America/New_York' # JSON curl 'https://cron.wickkit.cc/ics?e=0+3+*+*+*&tz=Europe/Berlin&name=Backups' # calendar
The calendar has the next 50 runs (n, up to 100), each d minutes long (default 15), titled name.
Subscribe to the /ics URL ("From URL" in Google Calendar, "New Calendar Subscription" in Apple Calendar) and it keeps rolling forward.
Five fields (minute hour day-of-month month day-of-week), names like mon and jan, and the @daily-style macros.
When both day fields are set, a day matches if either matches, as in standard cron.
A time skipped by a daylight-saving jump doesn't run; a time that happens twice runs once (systemd's rule).
Add &sched=cronie or &sched=k8s to /api for those rules, and /dst gives the daylight-saving comparison as JSON.
cronie runs a job whose time was skipped right after the jump, unless its minute or hour field starts with *;
Kubernetes runs a time that happens twice twice.