Mikkel Duif
05/15/2022, 11:07 AMimport asyncio
import pendulum
from datetime import timedelta
from prefect.orion.schemas.schedules import IntervalSchedule
winter_schedule = IntervalSchedule(
interval=timedelta(hours=24),
anchor_date=pendulum.datetime(2022, 1, 1, 0, 30, 0, tz="Europe/Copenhagen")
)
summer_schedule = IntervalSchedule(
interval=timedelta(hours=24),
anchor_date=pendulum.datetime(2022, 4, 1, 0, 30, 0, tz="Europe/Copenhagen")
)
print(asyncio.run(winter_schedule.get_dates(1))[0])
print(asyncio.run(summer_schedule.get_dates(1))[0])
>>> "2022-05-16T01:30:00+02:00"
>>> "2022-05-16T00:30:00+02:00"
Anna Geller
05/15/2022, 11:56 AMMikkel Duif
05/15/2022, 12:03 PMAnna Geller
05/15/2022, 12:06 PMschedule = CronSchedule(cron="30 0 * * *", timezone="Europe/Copenhagen")
print(asyncio.run(schedule.get_dates(10, start=pendulum.datetime(2022, 1, 1, 0, 30, 0, tz="Europe/Copenhagen"))))
works exactly as you wanted:
Cron's rules for DST are based on schedule times, not intervals. This means that an hourly cron schedule will fire on every new
schedule hour, not every elapsed hour; for example, when clocks are set back
this will result in a two-hour pause as the schedule will fire *the first
time* 1am is reached and *the first time* 2am is reached, 120 minutes later.
Longer schedules, such as one that fires at 9am every morning, will
automatically adjust for DST.
Mikkel Duif
05/15/2022, 12:13 PMAnna Geller
05/15/2022, 12:15 PMIntervalSchedule
in Prefect 2.0"Marvin
05/15/2022, 12:16 PM