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
相关产品推荐
相关产品推荐

