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

 

posted @ 2019-09-06 10:57  闻歌感旧  阅读(1129)  评论(1编辑  收藏  举报