​ 在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
)

最新文章

  1. geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题
  2. python基础第四天(1)
  3. Java 初学记录之一 快速输入
  4. MVC+EF更新数据库
  5. iis8 默认不支持svc解决方法
  6. 图表框架HelloCharts(1)线形图
  7. 2013 ACM/ICPC Asia Regional Changsha Online - E
  8. Objective-C /iphone开发基础:分类(category,又称类别)
  9. 20款Notepad++插件下载和介绍
  10. 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)
  11. TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)
  12. shell命令一行代码搞定【转】
  13. bootstrap中下拉菜单点击事件 uncaught syntaxerror unexpected end of input异常问题
  14. uvalive 2965 Jurassic Remains
  15. 1.moocs
  16. iptables log日志记录功能扩展应用:iptables自动配置临时访问策略,任意公网登录服务器
  17. Mybatis 使用备忘录
  18. bitset用法详解
  19. 1、Qt Project之基本文件打开与保存
  20. Linux之Ubuntu安装Sublime

热门文章

  1. (二)对象以及变量的并发访问--synchronized的使用细节,用法
  2. G-P-M 模型
  3. Kendo-Grid for Vue API and Template
  4. C语言编程入门之--第五章C语言基本运算和表达式-part3
  5. nessus安装
  6. MyBatis的flushCache和useCache的使用注意
  7. Unity 自定义Inspector面板时的数据持久化问题
  8. HandlerMethodArgumentResolver(三):基于消息转换器的参数处理器【享学Spring MVC】
  9. 使用react定义组件的两种方式
  10. Count the string[KMP]HDU3336