Solr 日期类型数据转换

    最近在做一个迁移老项目的工作,把一个PHP项目上的功能模块迁移到一个Java项目中,前台数据通过solr查询展现,然后就发现查询到的日期类型数据都比当时存进去的日期多8个小时(正好一个时区),各种查找资料后才发现里面的小九九。

      原因是Solr的日期类型是标准的XML Schema的"日期型数据格式",T后面跟着"时间",Z代表0时区 ,又叫UTC统一时间,也就是英国的格林尼治天文台的时间,而我们中国在东八区,用的是GMT时间,比UTC时间多了8个小时。如图:


如果存储的时候是String类型的话,用SimpleTimeFormat处理一下就可以得到正确的时间

@Test
public void testdata()throws ParseException{
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    String date = "2018-06-22T19:26:23Z";
    try {
        System.out.println("转换结果:"+sdf.parse(date));
    } catch (ParseException e) {
        e.printStackTrace();
    }
}


但是我这项目里存的就是Data型数据,所以不能采取以上方式处理,js中处理方式如下:

/**
 * solr日期转换
 * @param creationTime
 * @returns {number}
 */
function timeToSolr(creationTime){
    return creationTime-28800000;
}
注:28800000ms=8h

Java中处理方式如下:

/**
 * solr日期转换
 * @param solrDate
 * @return
 */
public String formDate(Date solrDate) {
    String newDate = "";
    try {
        if (solrDate == null) {
            return null;
        }
        Calendar ca = Calendar.getInstance();
        ca.setTime(solrDate);
        ca.add(Calendar.HOUR_OF_DAY, -8);
        newDate = DateFormatUtils.format(ca.getTime(),"yyyy-MM-dd HH:mm:ss");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return newDate;
}

引荐一篇大神分析的文章吧:https://www.jianshu.com/p/8f65ffbd5c74

猜你喜欢

转载自blog.csdn.net/v_carolin/article/details/80839833
今日推荐