Tools, Cron and Airflow
What a cron schedule means, and what Airflow does with it.
Paste a cron expression or build one from a preset to see it described in plain words, its next runs in a timezone you choose, any daylight-saving gap or overlap ahead, and how Airflow's two timetable classes read the same schedule differently.
| minute | hour | day of month | month | day of week |
|---|---|---|---|---|
| 0 | 2 | * | * | * |
Runs daily at 02:00.
Australia/Sydney
Or start from a common schedule
Next 8 runs
Local time in Australia/Sydney
| # | Weekday | Date | Local time |
|---|---|---|---|
| 1 | Fri | 30 Oct 2026 | |
| 2 | Sat | 31 Oct 2026 | |
| 3 | Sun | 1 Nov 2026 | |
| 4 | Mon | 2 Nov 2026 | |
| 5 | Tue | 3 Nov 2026 | |
| 6 | Wed | 4 Nov 2026 | |
| 7 | Thu | 5 Nov 2026 | |
| 8 | Fri | 6 Nov 2026 |
Daylight saving in the next 13 months
Sun 4 Apr 2027
UTC+11:00 to UTC+10:00
Clocks move back one hour on Sun 4 Apr 2027. Local times in the repeated hour occur twice, so croner runs a job scheduled in them once.
Sun 3 Oct 2027
UTC+10:00 to UTC+11:00
Clocks move forward one hour on Sun 3 Oct 2027. Local times in the skipped hour do not occur that day, so croner runs a job scheduled in them one hour later.
What Airflow does with this schedule
CronTriggerTimetable
Airflow 3 with the default scheduler.create_cron_data_intervals = False.
- data_interval_start
- Equal to the trigger time: a trigger timetable carries no data interval.
- data_interval_end
- Equal to the trigger time: a trigger timetable carries no data interval.
{{ ds }} is the logical date, set to data_interval_start, so on a daily schedule it is today's date, not yesterday's.
CronDataIntervalTimetable
Airflow 2.x (default), or Airflow 3 with scheduler.create_cron_data_intervals = True.
- data_interval_start
- The start of the interval that just finished.
- data_interval_end
- Equal to the trigger time: a data-interval timetable fires at the end of the interval it describes.
{{ ds }} is the logical date, set to data_interval_start, so on a daily schedule it is yesterday's date relative to the run that just triggered.
What it checks and does not
| Area | Checks | Does not |
|---|---|---|
| Description | Describes a five-field cron expression, or an @daily-style preset, in words. | — |
| Next runs | Lists the next runs in an IANA timezone you choose, using croner. | — |
| Daylight saving | Flags gaps/overlaps in 13 months; a gap run shifts later, an overlap runs once. | Does not reproduce Airflow's own DST handling; listed runs come from croner. |
| Airflow timetables | Shows CronTriggerTimetable (Airflow 3 default) and CronDataIntervalTimetable (Airflow 2, or opted in). | — |
| Scope | — | Does not detect your Airflow version/config, or model catchup, max_active_runs, pools or sensors. |
Description
Describes a five-field cron expression, or an
@daily-style preset, in words.Next runs
Lists the next runs in an IANA timezone you choose, using croner.
Daylight saving
Flags gaps/overlaps in 13 months; a gap run shifts later, an overlap runs once.
Does not reproduce Airflow's own DST handling; listed runs come from croner.
Airflow timetables
Shows
CronTriggerTimetable(Airflow 3 default) andCronDataIntervalTimetable(Airflow 2, or opted in).Scope
Does not detect your Airflow version/config, or model catchup,
max_active_runs, pools or sensors.