Solrj日期时区

use*_*527 1 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"));
}
Run Code Online (Sandbox Code Playgroud)

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

写+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]") );
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*erg 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) + "]"; 
Run Code Online (Sandbox Code Playgroud)

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