diff --git a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregationBuilder.java b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregationBuilder.java index 5df239093c5ae..f767840d8a3da 100644 --- a/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregationBuilder.java +++ b/server/src/main/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramAggregationBuilder.java @@ -467,7 +467,7 @@ ZoneId rewriteTimeZone(QueryShardContext context) throws IOException { ZoneOffsetTransition prevOffsetTransition = tz.getRules().previousTransition(instant); final long prevTransition; - if (prevOffsetTransition != null) { + if (prevOffsetTransition != null) { prevTransition = prevOffsetTransition.getInstant().toEpochMilli(); } else { prevTransition = instant.toEpochMilli(); @@ -477,7 +477,7 @@ ZoneId rewriteTimeZone(QueryShardContext context) throws IOException { if (nextOffsetTransition != null) { nextTransition = nextOffsetTransition.getInstant().toEpochMilli(); } else { - nextTransition = instant.toEpochMilli(); + nextTransition = Long.MAX_VALUE; // fixed time-zone after prevTransition } // We need all not only values but also rounded values to be within diff --git a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramTests.java b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramTests.java index 373df3e5f26a0..06ea9a37ba223 100644 --- a/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramTests.java +++ b/server/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/DateHistogramTests.java @@ -170,6 +170,18 @@ public void testRewriteTimeZone() throws IOException { assertSame(tz, builder.rewriteTimeZone(shardContextThatDoesntCross)); assertSame(tz, builder.rewriteTimeZone(shardContextThatCrosses)); + // timeZone without DST => always rewrite + tz = ZoneId.of("Australia/Brisbane"); + builder.timeZone(tz); + assertSame(ZoneOffset.ofHours(10), builder.rewriteTimeZone(shardContextThatDoesntCross)); + assertSame(ZoneOffset.ofHours(10), builder.rewriteTimeZone(shardContextThatCrosses)); + + // another timeZone without DST => always rewrite + tz = ZoneId.of("Asia/Katmandu"); + builder.timeZone(tz); + assertSame(ZoneOffset.ofHoursMinutes(5, 45), builder.rewriteTimeZone(shardContextThatDoesntCross)); + assertSame(ZoneOffset.ofHoursMinutes(5, 45), builder.rewriteTimeZone(shardContextThatCrosses)); + // daylight-saving-times => rewrite if doesn't cross tz = ZoneId.of("Europe/Paris"); builder.timeZone(tz);