美文网首页
ES对时间类型数据的处理

ES对时间类型数据的处理

作者: 蜡笔广志 | 来源:发表于2019-03-11 14:35 被阅读0次

    把想要的数据通过同步工具从MySQL中写入ES中存储,然后从搜索后台管理系统读取数据列表,发现时间显示比数据库中显示的时间要提前8小时。

    造成这个问题的原因是ES存储格式为世界时间,默认是0时区,但是我们一般用的是北京时间东八区,因此间隔了八小时。

    解决这个方法的思路有2个:

    1把date转换成long型,避开时区概念。缺点是不够直观,显示的时候还要进行一次时间转码。

    2:在检索或者插入的时候补齐这8小时的时差,方法如下

    // 获取es用时间

    public static String getDateForEs(Date date) {

    // 开始日期

    Calendar cal = Calendar.getInstance();

    cal.setTime(date);

    cal.add(Calendar.HOUR, - 8);

    date = cal.getTime();

    String time = getISO8601Timestamp(date);

    return time;

    }

    public static String getISO8601Timestamp(Date date){

    TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

    df.setTimeZone(tz);

    String nowAsISO = df.format(date);

    return nowAsISO;

    }

    方法调用

    startDate = DateUtil.getStartSecondsDate(DateUtil.stringToYMD(strCreateTime));

    endDate = DateUtil.getVailDate(DateUtil.stringToYMD(strCreateTime));

    start = DateUtil.getDateForEs(startDate);

    end = DateUtil.getDateForEs(endDate);

    // 实际检索

    mainBuilder.must(QueryBuilders.rangeQuery("createtime").from(start).to(end));

    相关文章

      网友评论

          本文标题:ES对时间类型数据的处理

          本文链接:https://www.haomeiwen.com/subject/bvxbpqtx.html