0

    任务调度系统airflow显示时间的更改:修改成中国时区

    2023.05.26 | admin | 237次围观

    当我们初次安装,对配置文件中的时区选择没有什么更改时,我们发现他在右上角上面显示的时间是不正确的,也就是和我们中国时区是不对应的,显示时间少了8个小时,这个系统的时差还是没有倒过来:

    右上角的时间是我修改后的,显示的是正确的中国时区的时间,如果没有更改,那么显示的是2019-11-03 09:13的时间,这是utc时区显示时间html时间日期选择器,默认情况下启用对时区的支持。 Airflow在内部和数据库中以UTC格式存储日期时间信息。 它允许您使用时区相关的计划运行DAG。 目前,Airflow不会将其转换为用户界面中的最终用户时区。 它始终以UTC显示。 此外,操作符中使用的模板也不会被转换。即使您只在一个时区运行Airflow,在数据库中以UTC格式存储数据仍然是一种很好的做法。 主要原因是夏令时(DST)。 许多国家都有DST系统html时间日期选择器,其中时钟在春季向前移动,在秋季向后移动。 如果您在当地工作,那么当转换发生时,您可能每年会遇到两次错误,这对于简单的DAG可能无关紧要,但如果您处于金融服务中,那么这是一个问题,在这些金融服务中您可以满足最后期限。时区在airflow.cfg中设置。 默认情况下,它设置为utc,但您将其更改为使用系统设置或任意IANA时区,Web UI目前仅以UTC格式运行,那么我们在中国的时区,有尴尬症,必须显示我们这的时间,那也是有办法的,除了修改配置文件中时区的选择,还要修改相关源码

    1、修改配置文件airflow.cfg中default_timezone的选项:

    2、这样的修改是不起作用的,还要去修改airflow源码中国计算当前时间显示的相关代码,第一个要修改的地方是airflow/utils/timezone.py,在 utc = pendulum.timezone(‘UTC’) 这行(第27行)代码下添加:

    代码为:

    from airflow import configuration as conf
    try:
     tz = conf.get("core", "default_timezone")
     if tz == "system":
     utc = pendulum.local_timezone()
     else:
     utc = pendulum.timezone(tz)
    except Exception:
     pass
    

    修改utcnow()函数 :

    修改d = dt.datetime.utcnow()为:d = dt.datetime.now()

    3、修改airflow/utils/sqlalchemy.py,在utc = pendulum.timezone(‘UTC’) 这行(第37行)代码下添加:

    4、这样获取时间的方法已经修改了,那么显示时间的地方也要改动,要改的源码文件为:airflow/www/templates/admin/master.html:

    重新启动airflow webserver,我们刚才修改的就会生效:

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论