我正在运行时间表为0 0 * * 1-5
的时区感知DAG(tz = Europe / London)。
在星期五的跑步中,2020-03-27
,next_ds
设置为2020-03-29
。但是,根据时间表,我希望它是2020-03-30
。
该间隔包含夏令时跳过-next_ds
是否可能没有适当考虑这一点?还是对此行为有不同的解释?
我正在运行时间表为0 0 * * 1-5
的时区感知DAG(tz = Europe / London)。
在星期五的跑步中,2020-03-27
,next_ds
设置为2020-03-29
。但是,根据时间表,我希望它是2020-03-30
。
该间隔包含夏令时跳过-next_ds
是否可能没有适当考虑这一点?还是对此行为有不同的解释?
事实证明,我应该已经阅读了手册-在https://airflow.apache.org/docs/stable/timezone.html上写着
Airflow在模板中返回可识别时区的日期时间,但不会将其转换为本地时间,因此它们保留在UTC中。由DAG处理。
我现在正在使用jinja过滤器来解决此问题,定义
def local_ds(execution_date):
return execution_date.in_timezone(local_tz).strftime('%Y-%m-%d')
,然后在模板中使用{{ execution_date | local_ds }}
。
我想这会特别困扰那些使用Europe/London
时区的人们,因为当地时间的午夜在冬季是UTC的午夜,但是在夏季,它变成UTC的前一天的23:00,因此更改了日期。