Airflow的设计理念是国际通用,不管在哪个时区,所以Airflow整体使用的是UTC时间,无论是数据库存储的时间还是WebServer UI上显示的时间都是UTC时间,而且是没法改的;

数据库里存储的时间格式,我们根本不关心,UI界面上大部分显示的都是UTC时间,但是重要的地方,比如说Task Instance的运行开始时间,结束时间等重要的地方会同时显示,UTC时间和设置的Local的时间,所有这点也可以忍受;

最重要的是我们在写dag文件的时候,里面的时区怎么处理呢?
在airflow.cfg配置文件的core部分,有如下的配置,我们可以设置任何一个IANA time zone中指定的时区;

[core]
default_timezone = utc

这样我们在配置文件中的时间就都是基于此配置的时区的了;

万金油的打法是下面这个样子,Time zone aware DAGs

import pendulum

local_tz = pendulum.timezone("Europe/Amsterdam")

default_args=dict(
start_date=datetime(2016, 1, 1, tzinfo=local_tz),
owner='Airflow'
)

dag = DAG('my_tz_dag', default_args=default_args)
op = DummyOperator(task_id='dummy', dag=dag)
print(dag.timezone) # <Timezone [Europe/Amsterdam]>

Airflow会自动处理时间对象里的tzinfo属性,在合适的时间做转化

参考
​​​Apache Airflow Documentation # Time zones​