gpt4 book ai didi

java - 为什么 FilterBuilders.rangeFilter 方法会更改范围查询中的日期?

转载 作者:行者123 更新时间:2023-12-01 12:16:14 25 4
gpt4 key购买 nike

Es 1.1 中,我尝试通过以下映射对日期字段使用范围过滤器:

"hiringDate": { "type": "date", "format": "dateOptionalTime" }

令人惊讶的是,由以下代码片段构建的查询将两个限制的日期更改为前一天。

DateFormat df = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
Date startDate = df.parse("11-16-2014 00:00:00");
Date endDate = df.parse("11-18-2014 23:59:59");

FilterBuilder rangeFilter = FilterBuilders
.rangeFilter("dateOfJoining").from(startDate).to(endDate);
System.out.println(rangeFilter);

这是输出:

{
"range" : {
"hiringDate" : {
"from" : "2014-11-15T18:30:00.000Z",
"to" : "2014-11-18T18:29:59.000Z",
"include_lower" : true,
"include_upper" : true
}
}
}

现在我的问题是这是预期的行为还是我做错了什么。日期似乎已更改为 GMT 时间。有什么办法可以避免这种情况吗?

最佳答案

这是预期的,因为 ElasticSearch 在显示日期时使用 UTC,而 Java Date 对象使用系统的默认时区。

为了避免这种情况,您可以为日期解析器设置时区

  df.setTimeZone(TimeZone.getTimeZone("UTC"));

要确认,您可以检查 org.elasticsearch.common.xcontent.XContentBuilder。

关于java - 为什么 FilterBuilders.rangeFilter 方法会更改范围查询中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26993992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com