airflow使用本地时区
2024-09-01 06:58:06
在airflow中使用的时间是utc时间,而更多时候我们希望的是使用本地时间,于是在定义airflow定时任务的时候,涉及到了时间的转换。
1.python中本地时间和utc时间的转换
查看国内可用时区:
>>> import pytz
>>> pytz.country_timezones('cn')
['Asia/Shanghai', 'Asia/Urumqi']
方式一:
修改配置文件airflow.conf
使用操作系统时间
[core]
default_timezone=system
方式二:
tz = pytz.timezone('Asia/Shanghai')
naive = datetime.strptime("2018-06-13 17:40:00", "%Y-%m-%d %H:%M:%S")
local_dt = tz.localize(naive, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)
参考链接: https://stackoverflow.com/questions/79797/how-do-i-convert-local-time-to-utc-in-python
方式三:
tz = pytz.timezone('Asia/Shanghai')
dt = datetime(2018, 6, 13, 17, 40, tzinfo=tz)
utc_dt = dt.astimezone(pytz.utc)
2.Airflow中通过时间转换使用本地时间
这里涉及到一个问题,如果只是将本地时间转换成了utc时间,那么在运行过程中airflow会抛出以下错误:
Can't subtract offset-naive and offset-aware datetimes
解决办法是当将时间转换为utc时间之后将其时区属性设为None:
dt.replace(tzinfo=None)
参考链接: https://stackoverflow.com/questions/796008/cant-subtract-offset-naive-and-offset-aware-datetimes
完整示例DAG如下:
import time
import airflow
import pytz
from airflow.operators.python_operator import PythonOperator
from airflow.models import DAG
from datetime import timedelta, datetime
default_args = {
'owner': 'cord',
'depends_on_past': True,
'email': ['123456@qq.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
tz = pytz.timezone('Asia/Shanghai')
# naive = datetime.strptime("2018-06-13 17:40:00", "%Y-%m-%d %H:%M:%S")
# local_dt = tz.localize(naive, is_dst=None)
# utc_dt = local_dt.astimezone(pytz.utc).replace(tzinfo=None)
dt = datetime(2018, 6, 13, 17, 40, tzinfo=tz)
utc_dt = dt.astimezone(pytz.utc).replace(tzinfo=None)
dag = DAG(
'demo',
default_args=default_args,
description='my DAG',
schedule_interval='* */3 * * *',
start_date=utc_dt
)
def test_func(str):
print(str)
task = PythonOperator(
task_id='hello',
python_callable=test_func,
op_kwargs={'str': 'hello world'},
dag=dag
)
最新文章
- geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题
- python基础第四天(1)
- Java 初学记录之一 快速输入
- MVC+EF更新数据库
- iis8 默认不支持svc解决方法
- 图表框架HelloCharts(1)线形图
- 2013 ACM/ICPC Asia Regional Changsha Online - E
- Objective-C /iphone开发基础:分类(category,又称类别)
- 20款Notepad++插件下载和介绍
- 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)
- shell命令一行代码搞定【转】
- bootstrap中下拉菜单点击事件 uncaught syntaxerror unexpected end of input异常问题
- uvalive 2965 Jurassic Remains
- 1.moocs
- iptables log日志记录功能扩展应用:iptables自动配置临时访问策略,任意公网登录服务器
- Mybatis 使用备忘录
- bitset用法详解
- 1、Qt Project之基本文件打开与保存
- Linux之Ubuntu安装Sublime
热门文章
- (二)对象以及变量的并发访问--synchronized的使用细节,用法
- G-P-M 模型
- Kendo-Grid for Vue API and Template
- C语言编程入门之--第五章C语言基本运算和表达式-part3
- nessus安装
- MyBatis的flushCache和useCache的使用注意
- Unity 自定义Inspector面板时的数据持久化问题
- HandlerMethodArgumentResolver(三):基于消息转换器的参数处理器【享学Spring MVC】
- 使用react定义组件的两种方式
- Count the string[KMP]HDU3336