Aviator字符串时间处理

在使用Aviator写脚本的时候,处理时间的时候,只能获取到当前时间。想传时间字符串进去,然后进行替换计算该如何处理呢?

代码

字符串转时间

// 把时间字符串转换为时间
public static Date strToDateTime(String time) {
    Date dateTime = null;
    try {
        dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return dateTime;
}

当前时间

// 时间 当前时间
public static void testNowDate() {
    String expression = " let d = new java.util.Date(); let year = getYear(d); let month = getMonth(d); let time = getTime(d);  return time;";

    Map<String, Object> env = new HashMap<>();
    // 启用基于反射的方法查找和调用
    AviatorEvaluator.setFunctionMissing(JavaMethodReflectionFunctionMissing.getInstance());
    Expression compiledExp = AviatorEvaluator.compile(expression);
    Object result = compiledExp.execute(env);
    System.out.println(result);
}


把字符串用java变成时间,再替换值

// 替换时间 把字符变成时间,再替换表达式的值
public static void testDateGetTime() {
    String expression = "let d = $row.startTime; let year = getYear(d); let month = getMonth(d); let time = getTime(d);  return time;";
    Map<String, Object> env = new HashMap<>();
    Map<String, Object> aEnv = new HashMap<>();
    String startTime = "2022-03-25 10:25:25";
    Date startDateTime = strToDateTime(startTime);
    aEnv.put("startTime", startDateTime);
    env.put("$row", aEnv);
    // 启用基于反射的方法查找和调用
    AviatorEvaluator.setFunctionMissing(JavaMethodReflectionFunctionMissing.getInstance());
    Expression compiledExp = AviatorEvaluator.compile(expression);
    Object result = compiledExp.execute(env);
    System.out.println(result);
}

把字符串用java变成时间,再进行计算

// 对时间进行计算
public static void testDateGetTimeCalculate() {
    String expression = "let st = $row.startTimeStr; let startTime = getTime(st);  let ed = $row.endTimeStr; let endTime = getTime(ed);  return endTime - startTime;";

    Map<String, Object> env = new HashMap<>();
    Map<String, Object> aEnv = new HashMap<>();
    String startTime = "2022-03-25 10:25:25";
    String endTime = "2022-03-25 11:25:25";
    Date startDateTime = strToDateTime(startTime);
    Date endDateTime = strToDateTime(endTime);
    aEnv.put("startTimeStr", startDateTime);
    aEnv.put("endTimeStr", endDateTime);
    env.put("$row", aEnv);
    // 启用基于反射的方法查找和调用
    AviatorEvaluator.setFunctionMissing(JavaMethodReflectionFunctionMissing.getInstance());
    Expression compiledExp = AviatorEvaluator.compile(expression);
    Object result = compiledExp.execute(env);
    System.out.println(result);
}

把字符串用java变成时间,计算添加单位

 

// 时间计算 添加计算和单位
public static void testDateGetTimeCalculateUnit() {
    String expression = "let st = $row.startTimeStr; let startTime = getTime(st);  " +
            "let ed = $row.endTimeStr; let endTime = getTime(ed);  " +
            "return (endTime - startTime)/divisor+unit;";

    Map<String, Object> env = new HashMap<>();
    Map<String, Object> aEnv = new HashMap<>();
    String startTime = "2022-03-25 10:25:25";
    String endTime = "2022-03-25 11:25:25";
    Date startDateTime = strToDateTime(startTime);
    Date endDateTime = strToDateTime(endTime);
    aEnv.put("startTimeStr", startDateTime);
    aEnv.put("endTimeStr", endDateTime);
    env.put("$row", aEnv);
    env.put("divisor", 1000);
    env.put("unit", "s");
    // 启用基于反射的方法查找和调用
    AviatorEvaluator.setFunctionMissing(JavaMethodReflectionFunctionMissing.getInstance());
    Expression compiledExp = AviatorEvaluator.compile(expression);
    Object result = compiledExp.execute(env);
    System.out.println(result);
}
public static void main(String args[]) {
    testNowDate();
    testDateGetTime();
    testDateGetTimeCalculate();
    testDateGetTimeCalculateUnit();
}

总结:

   在用Aviator处理时间的时候,把字符串时间转换时间,再替换表达式里面对应的值,再进行计算和处理。 如果没有指定具体时间字段该如何处理呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值