Datetime solr NOW/天和时区

Datetime solr NOW/天和时区,datetime,solr,timezone,Datetime,Solr,Timezone,我又一次偶然发现了时区问题。我知道solr以UTC时区存储日期,我知道我的用户来自——比如说纽约,tz=EST=UTC-4h 问题: 我想为用户显示今天的数据 我通过询问来做这件事 日期:[现在/今天到现在/天+1天] 。这将给我错误的结果,因为我想从一天的开始查询EST时间,而不是UTC时间 问:有没有一种方法仍然使用NOW/DAY并根据时区进行调整,还是我们总是需要使用UTC日期字符串进行查询?一种方法是,您知道时区的差异。你知道solr是怎么储存的。因此,当一个请求到来时,您可以添加/减去

我又一次偶然发现了时区问题。我知道solr以UTC时区存储日期,我知道我的用户来自——比如说纽约,tz=EST=UTC-4h

问题: 我想为用户显示今天的数据

我通过询问来做这件事

日期:[现在/今天到现在/天+1天]

。这将给我错误的结果,因为我想从一天的开始查询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);
我在这里用的是乔达约会时间。您可以使用java日期或日历

这会被转换成这样的东西

date:[2016-05-30T01:51:00.841Z/DAY TO 2016-05-30T01:51:00.841Z/DAY+1DAY]

在这种情况下,我需要修改查询,这就是问题点。NOW/DAY将始终从UTC午夜向我提供数据,无论我在应用程序中使用的时区是什么。因此,用户将无法获得今天的数据,但UTC今天的数据当您不想与UTC打交道时,我想您将失去“现在”的力量。