В текущих версиях Airflow (1.10.x) им требуется модуль маятник , поскольку существует ограниченная поддержка планирования с учетом часового пояса .
.значения макросов TS
и EXECUTION_DATE
установлены (iirc) на часовой пояс UTC системы Airflow, потому что это то, во что Airflow преобразует все при сохранении в БД и отображении пользовательского интерфейса.Вы, возможно, ожидали, что изменение этого в конфигурации:
[core]
default_timezone = utc
может повлиять на это, но, похоже, это повлияет только на понимание времени наивной даты (например, если вы установите DAG start_date на Datetime(2018,12,25)
, это будетпредполагается, что он находится в default_timezone
)
Вы можете преобразовать execution_date
в DAG в PythonOperator следующим образом:
import pendulum
desired_tz = pendulum.timezone("Europe/Amsterdam")
desired_tz.convert(execution_date)
Поскольку execution_date
уже будет знать, что это в UTCпреобразование должно быть точным.Обратите внимание, что это ни к чему не привязывает и не меняет execution_date
.
Вот что происходит, если вы работаете с местным временем (неизвестный часовой пояс):
>>> import pendulum
>>> dtz=pendulum.timezone("Europe/Amsterdam")
>>> dtz
Timezone('Europe/Amsterdam')
>>> import datetime
>>> d=datetime.datetime.now()
>>> d
datetime.datetime(2018, 12, 17, 17, 36, 5, 435666)
>>> dtz.convert(d) # Notice unchanged
datetime.datetime(2018, 12, 17, 17, 36, 5, 435666, tzinfo=Timezone('Europe/Amsterdam'))
>>> d
datetime.datetime(2018, 12, 17, 17, 36, 5, 435666)
>>> dtz.convert(pendulum.timezone("UTC").convert(d)) # Notice changed
datetime.datetime(2018, 12, 17, 18, 36, 5, 435666, fold=1, tzinfo=Timezone('Europe/Amsterdam'))
>>> d # Notice change not assigned
datetime.datetime(2018, 12, 17, 17, 36, 5, 435666)
Итак ... Я надеюсьэто помогает, потому что CET имеет переменное смещение относительно UTC IIRC.