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”。

  • 相关阅读:
    struts2 constant详解
    大图片上传(ImageIO,注意有的图片不能上传时因为他是tiff格式)
    Spring提供的iBatis的SqlMap配置
    2013-7-31hibernate二级缓存
    2013-7-30。。。。难得闲
    POI导出大量数据的简单解决方案
    Tomcat优化详细2
    Tomcat优化详细1
    Tomcat优化方案
    java链表实现
  • 原文地址:https://www.cnblogs.com/wggj/p/11472574.html
Copyright © 2011-2022 走看看