Solrj日期时区

时间:2013-01-07 12:19:20

标签: java solr solrj

我使用apache solr 4,我是Solr中的新用户,我想在两个日期之间进行查询,但我有一个关于时区的问题:如果我想查询一天,我会在前一天查询这一天。

String urlString = "http://localhost:8983/solr"; 
SolrServer solr = new CommonsHttpSolrServer(urlString);
QueryResponse rsp = solr.query(  new SolrQuery("last_modified:[2013-01-03T00:00:00Z TO 2013-01-05T23:59:59Z]") );
SolrDocumentList docs = rsp.getResults();
for(int i=0;i<docs.getNumFound() ; i++) {
    System.out.println (docs.get(i).getFieldValue("id"));
}

我搜索了一下,我找到了一条建议:

  

写+00:00而不是Z.例如,2002-10-10T12:00:00 + 05:00是2002-10-10T07:00:00Z

但是当我这样做时,我得到了例外:

QueryResponse rsp = solr.query( new SolrQuery("last_modified:[2013-01-03T00:00:00+04:00 TO 2013-01-05T23:59:59+04:00]") );

我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:6)

可悲的是,Solr只支持Z格式,据我所知,它不理解时区语法。

显然,您不是UTC,因此您希望将其转换为您的时区。最简单的方法是使用正确的语言环境在代码中执行此操作 - 例如计算您需要的任何范围的UTC时间。

SimpleDateFormat genericDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");

SimpleDateFormat dateFormatUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
dateFormatUTC.setTimeZone(TimeZone.getTimeZone("UTC"));

Date start = genericDateFormat.parse("2013-01-03T00:00:00+0400");
Date end = genericDateFormat.parse("2013-01-03T23:59:59+0400");

String range = "[" + dateFormatUTC.format(start) + " TO " + dateFormatUTC.format(end) + "]"; 

range将包含字符串[2013-01-02T20:00:00Z TO 2013-01-03T19:59:59Z],该字符串对应于UTC + 4中1月3日的整个日期。