You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAG中设置的start_date显示为前一天(英国时区)如何解决?

问题原因与解决方案

问题根源

Airflow内部所有时间数据均以UTC时区存储。你设置的start_date是英国时区(2023-09-26 00:00 BST,当时英国处于夏令时,UTC+1),转换为UTC时间就是2023-09-25 23:00。测试用例中直接截取str(task.start_date)的前10位,实际取的是UTC时区的日期,因此得到2023-09-25。

修复方案

修改测试用例代码,将存储的UTC时间转换回英国时区后再格式化日期:

def details_task_sensor(dag, task_name, start_date, dag_id, task_id):
    task = dag.get_task(task_name)
    
    # 将UTC时间转换为英国时区,再格式化日期字符串
    local_start_date = task.start_date.astimezone(local_time_zone).strftime("%Y-%m-%d")
    print("Datetime:" + local_start_date)

    assert (local_start_date == start_date
            and task.depends_on_past == True
            and task.retries == 0
            and task.external_dag_id == dag_id
            and task.external_task_id == task_id
            and task.allowed_states == ["success"]
            and task.check_existence == True
            and task.mode == "reschedule")

额外验证点

确保你定义的local_time_zone是正确的英国时区:

  • Python 3.9+版本:
from zoneinfo import ZoneInfo
local_time_zone = ZoneInfo("Europe/London")
  • Python 3.9以下版本(需提前安装pytz库):
import pytz
local_time_zone = pytz.timezone("Europe/London")

内容的提问来源于stack exchange,提问作者Matthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:45:54