zoukankan      html  css  js  c++  java
  • Solr关于日期类型的转换示例

    一、Solr中的日期格式

    Solr是一个高性能的、基于Lucene的企业级全文检索服务器,SolrJ是其提供的用于Java程序访问的API,本文示例即采用的是SolrJ。

    在Solr中,日期类型的数据有非常严格的格式限制,为:

    YYYY-MM-DDTHH:mm:ssZ
    //YYYY, MM, DD, HH, mm, ss分别为年、月、日、时(24)、分、秒;
    //只有ss可以带小数,但只精确到0.001位,即毫秒级;
    //Z表示时区为UTC,不能更换。

    在为文档创建索引时,Solr会根据时区差异,将当地时间转换为上述格式。

    比如文档中某时间类型字段为“2019-09-06 10:20:30”,则直接查询到的结果为:

    2019-09-06T02:20:00Z
    //本地时区为UTC+8,所以有相差8小时。

    二、消除时区影响的处理

    为消除时区影响,可以利用SompleDateFormat类来进行转换,代码如下:

       String param = "2019-09-06T02:20:30Z";
       SimpleDateFormat sdfSolr = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
       sdfSolr.setTimeZone(TimeZone.getTimeZone("UTC"));
       Date date = sdfSolr.parse(arg);
       SimpleDateFormat sdfLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       sdfLocal.setTimeZone(TimeZone.getDefault());
       System.out.println("Local Time=" + sdfLocal.format(date));

    执行结果为:“2019-09-06 10:20:30”。

    三、使用toString后的处理

    项目中因为多加了一个中间层,对查询到的日期使用了toString()方法,则得到的结果变为CST格式:Fri Sep 06 02:20:30 CST 2019。为此,需对SompleDateFormat做些变化。代码如下:

       String param = "Fri Sep 06 02:20:30 CST 2019";
       SimpleDateFormat sdfCst = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy", Locale.US);
       Date date = sdfCst.parse(arg);
       SimpleDateFormat sdfLocal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       sdfLocal.setTimeZone(TimeZone.getDefault());
       System.out.println("Local Time=" + sdfLocal.format(date));

    执行结果仍为:“2019-09-06 10:20:30”。

  • 相关阅读:
    简述JavaScript中 同步与异步,阻塞与非阻塞
    浅谈 JavaScript 中 (for循环) 的几种写法及其性能问题
    简述vue下高德地图的一些简单功能的使用(定位,添加marker)
    vuex中mutations与actions的使用及区别
    项目中 vue与高德地图一起使用 (一)
    css3动画,requestAnimationFrame动画与canvas图形
    setTimeout 在 js 加载前的问题探究
    面试答案
    css实现垂直居中的几种常见方法
    align-conten和align-items之间的区别
  • 原文地址:https://www.cnblogs.com/wggj/p/11472574.html
Copyright © 2011-2022 走看看