首页 > 解决方案 > 在时区感知 DAG 中,next_ds 在夏令时期间的行为是否正确?

问题描述

我正在运行一个时区感知 DAG(tz=Europe/London),其时间表为0 0 * * 1-5.

在星期五的运行中,2020-03-27,next_ds设置为2020-03-29。但是,根据时间表,我本来预计会是2020-03-30.

间隔包含夏令时跳过 - 是否可能next_ds没有正确考虑到这一点?还是对这种行为有不同的解释?

标签: airflowdst

解决方案


原来我应该阅读手册 - 在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,因此更改了日期。


推荐阅读