
# 日期时间偏移
1. 处理函数
   - dt_add函数的参数如下：
     ```
     dt_add(字段名, dt1=None, dt2=None, year(s)=None, month(s)=None, day(s)=None, hour(s)=None, minute(s)=None, second(s)=None, microsecond(s)=None, weeks(s)=None, weekday=None)
     ```
     year(s)、month(s)、day(s)等参数的后面都带有s，表示这些参数可以有两种形式，即year和years，month和months等。以year和years为例，如果参数传递的是year，表示在年份粒度上覆盖为year参数的值；如果传递的是years，表示在年份粒度上增加years参数的值。同时要一起组合使用的dt_add函数支持在特定时间粒度上修改（增加、减少、覆盖）日期时间的值。
     
   
   - dt_add中weekday参数通常和dt_MO、dt_TU等参数一起使用，表示特定星期几的偏移，如下例所示。
    
2. 场景1：按年和月进行日期偏移。
   - 原始日志
     ```
     {
         "time1" : "2019-06-04 2:41:26"
     }
     ```
     
   
   - 加工规则1
     ```
     e_set("time2", dt_add(v("time1"), year=2018))
     ```
     
   
   - 加工结果1
     ```
     {
     "time1": "2019-06-04 2:41:26",
     "time2": "2018-06-04 02:41:26"
     }
     ```
     
   
   - 加工规则2
     ```
     e_set("time2", dt_add(v("time1"), years=2018))
     ```
     
   
   - 加工结果2
     ```
     {
     "time1": "2019-06-04 2:41:26",
     "time2": "4037-06-04 02:41:26"
     }
     ```
     
    
3. 场景2：按周进行日期偏移。
   - 原始日志：2019-06-04是周二
     ```
     {
         "time1" : "2019-06-04 2:41:26"
     }
     ```
     
   
   - 加工规则
     ```
     #time1的下一个星期一对应的日期
     e_set("nex_Monday", dt_add(v("time1"), weekday=dt_MO(1)))
     #time1的上一个星期二对应的日期
     e_set("previous_Tuesday", dt_add(v("time1"), weekday=dt_TU(op_neg(1))))
     #time1的下下一个星期六对应的日期
     e_set("nex_next_Saturday", dt_add(v("time1"), weekday=dt_SA(2)))
     #time1的上上一个星期日对应的日期
     e_set("previous_previous_Sunday", dt_add(v("time1"), weekday=dt_SU(op_neg(2))))
     ```
     
   
   - 加工结果
     ```
     {
     "time1": "2019-06-04 2:41:26",
     "previous_Tuesday": "2019-05-28 02:41:26",
     "previous_previous_Sunday": "2019-05-26 02:41:26",
     "nex_next_Saturday": "2019-06-15 02:41:26",
     "nex_Monday": "2019-06-10 02:41:26"
     }
     ```
     
    
 
