2

我用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]") );

我能做些什么来解决这个问题?

4

1 回答 1

7

可悲的是,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 日全天的字符串。

于 2013-01-08T11:44:17.987 回答