Two ways to describe recurrence
Cron & RRULE Parser — Explain Schedules and Preview Runs
Cron schedules system work by matching fields. RRULE expands calendar recurrence from DTSTART. They can produce similar dates, but their syntax and semantics are not interchangeable.
Decode the five POSIX fields
15 10 * * 1-5At 10:15 on every weekday
15minute
0–59
10hour
0–23
*day of month
1–31
*month
1–12
1-5day of week
0–7
Dialect boundary
POSIX / Vixie
5 fields
Seconds / Quartz
6–7 fields
Cloud schedulers
provider-specific restrictions
Expand recurrence parts from DTSTART
DTSTART;TZID=America/New_York:20260803T101500 RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR;COUNT=8
DTSTARTBase date, time, and missing fields
FREQRequired recurrence frequency
INTERVAL / BYDAYExpansion and filtering
COUNT XOR UNTILBound the recurrence
TZIDInterpret local wall time
Preview bounded occurrences in the selected IANA timezone
Mon 3 · 10:15
Wed 5 · 10:15
Fri 7 · 10:15
Mon 10 · 10:15
Wed 12 · 10:15
Spring gap
A local time can not exist. The scheduler may skip it or apply a policy.
Autumn fold
A local time occurs twice. Offset and scheduler policy determine which instant runs.
Deployment checklist
- Choose and document the dialect
- Store the intended timezone explicitly
- Test near DST changes and month boundaries
- Bound RRULE previews and untrusted input
- Log future expected runs after deployment
- Monitor missed or duplicate executions
Schedule parser questions
- Are cron and RRULE interchangeable?
- No. Cron matches time fields in a scheduler dialect; RRULE expands calendar recurrence from a start date with RFC 5545 rule parts.
- Why does the same cron expression run at a different local hour?
- The scheduler timezone or daylight-saving offset changed. Store the runtime timezone and inspect actual future instants, not only the English summary.
- Can RRULE repeat forever?
- Yes when neither COUNT nor UNTIL is present. The preview is deliberately bounded so untrusted rules cannot produce an unbounded computation.