2024-04-26 18:42:32 发布
网友
我想在airflow中运行一个dag,其执行日期应为CET,但默认情况下airflow运行的是UTC。。所以如果我想在变量中使用TS或EXECUTION-DATE的值。。。它以UTC显示当前时间。。如何在CET时区获取执行日期
EXEC_DATE = "{{ (execution_date + macros.timedelta(hours=1)).strftime('%Y%m%d%H%M')}}"
这将给{ts}}增加一个小时的时间,并且会像CET:)一样工作
对于当前版本的Airflow(1.10.x),它们需要模块pendulum,因为对timezone aware scheduling的支持有限。在
TS和EXECUTION_DATE的宏值被(iirc)设置为气流系统的UTC时区,因为这是气流在保存到数据库并显示UI时将所有内容转换为的内容。您可能希望在配置中更改此设置:
TS
EXECUTION_DATE
[core] default_timezone = utc
可能会影响这一点,但它似乎只会影响对原始日期时间的理解(例如,如果将DAG start_date设置为Datetime(2018,12,25),则假定它在default_timezone中)
Datetime(2018,12,25)
default_timezone
您可以像这样在PythonOperator中转换DAG中的execution_date:
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有一个可变的偏移量。在
有一个很酷的库叫做arrow,可以用来将时间从一个时区转换到另一个时区
>>> import arrow >>> utc = arrow.utcnow() >>> utc <Arrow [2018-12-15T20:50:33.156717+00:00]> >>> local = utc.to('CET') >>> local <Arrow [2018-12-15T21:50:33.156717+01:00]>
只有内置库的方式
如果你想恢复iso格式
>>> cet_ts.isoformat() '2018-12-16T02:05:00'
编辑:
要转换ISO8601格式的字符串,可以使用以下命令
>>> ts = '2018-12-15T21:10:00+00:00' >>> arrow.get(ts) <Arrow [2018-12-15T21:10:00+00:00]>
要将日期从UTC转换为CET,只需运行
>>> utc.to('CET') <Arrow [2018-12-15T22:10:00+01:00]>
这将给{ts}}增加一个小时的时间,并且会像CET:)一样工作
对于当前版本的Airflow(1.10.x),它们需要模块pendulum,因为对timezone aware scheduling的支持有限。在
TS
和EXECUTION_DATE
的宏值被(iirc)设置为气流系统的UTC时区,因为这是气流在保存到数据库并显示UI时将所有内容转换为的内容。您可能希望在配置中更改此设置:可能会影响这一点,但它似乎只会影响对原始日期时间的理解(例如,如果将DAG start_date设置为
Datetime(2018,12,25)
,则假定它在default_timezone
中)您可以像这样在PythonOperator中转换DAG中的
^{pr2}$execution_date
:因为
execution_date
已经知道它是UTC格式,所以转换应该是准确的。请注意,这不会将其分配给任何对象,也不会更改execution_date
。在如果你在当地时间(未知时区)工作,会发生以下情况:
所以…我希望这有帮助,因为CET与UTC IIRC有一个可变的偏移量。在
有一个很酷的库叫做arrow,可以用来将时间从一个时区转换到另一个时区
只有内置库的方式
^{pr2}$如果你想恢复iso格式
编辑:
要转换ISO8601格式的字符串,可以使用以下命令
要将日期从UTC转换为CET,只需运行
相关问题 更多 >
编程相关推荐