我又遇到了一个时区问题。我知道solr以UTC时区存储日期我知道我的用户来自-比如纽约,tz=EST = UTC-4h
问题:我想为用户显示今天的数据。
我通过查询
date:[NOW/DAY TO NOW/DAY+1DAY]
。这将给我错误的结果,因为我想从一天的EST时间开始查询,而不是UTC。
问:是否有一种方法仍然使用NOW/DAY和调整时区,或者我们总是需要查询UTC日期字符串?
一种方法是,您知道时区差异。你知道solr是怎么储存的。因此,当一个请求来临时,您可以添加/减去时差,这将保持不变。
这个逻辑只适用于一个时区。要缩放它,你可以有一个通用的映射,你可以获得用户时区,然后将它映射到UTC时区。
您可以在java中尝试使用
SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT);
String userTimeZone = DateTimeZone.forID("Pacific/Midway");;
sdf.setTimeZone(dtZone.toTimeZone());
String currentTime = sdf.format(new Date());
String dateRange = dateInString.replaceAll("NOW", currentTime);
我在这里使用了joda日期时间。你可以使用java Date或Calendar。
这将被转换成这样的内容
date:[2016-05-30T01:51:00.841Z/DAY TO 2016-05-30T01:51:00.841Z/DAY+1DAY]