I can help you with that 😊
Index:
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExtractExpressionTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExtractExpressionTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExtractExpressionTest.java
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExtractExpressionTest.java
   (revision 30d98e8dec2f3c5da02f70abb77d4ccc226c647a)
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExtractExpressionTest.java
   (revision 5f1824107e3d14d34bcf909f99d37e3b146ed72c)
@@ -26,6 +26,12 @@
import org.junit.BeforeClass;
import org.junit.Test;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+
import static
org.apache.iotdb.db.queryengine.plan.relational.analyzer.TestUtils.assertAnalyzeSemanticException;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanAssert.assertPlan;
import static
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.expression;
@@ -62,11 +68,22 @@
@Test
public void constantFoldTest() {
PlanTester planTester = new PlanTester();
+ // IoTDB parses the timestamp literal using the *current* zone offset
(which may differ from
+ // the offset at the timestamp's date due to DST), then extracts the hour
using the full
+ // ZoneId (which applies DST rules for the timestamp's date). Reproduce
the same logic here
+ // to compute the expected hour.
+ ZoneId zone = ZoneId.systemDefault();
+ ZoneOffset currentOffset = zone.getRules().getOffset(Instant.now());
+ long epochMs =
+ LocalDateTime.of(2025, 7, 8, 1, 18,
51).toInstant(currentOffset).toEpochMilli();
+ long expectedHour =
+ ZonedDateTime.ofInstant(Instant.ofEpochMilli(epochMs), zone).getHour();
assertPlan(
planTester.createPlan("select extract(hour from 2025/07/08 01:18:51)
from table1"),
output(
project(
- ImmutableMap.of("expr", expression(new LongLiteral("1"))),
+ ImmutableMap.of(
+ "expr", expression(new
LongLiteral(String.valueOf(expectedHour)))),
tableScan("testdb.table1"))));
}
Chris
Von: Yuan Tian <[email protected]>
Datum: Donnerstag, 12. Februar 2026 um 14:38
An: [email protected] <[email protected]>
Betreff: Re: Timezone issues in test ...
Hi Chris,
Thanks for your reporting, I will try to fix it.
On Thu, Feb 12, 2026 at 5:53 PM Christofer Dutz <[email protected]>
wrote:
> In
>
> ExtractExpressionTest
>
> The issue is that the zone-offset is different now compared to the
> reference date.
> That’s because Europe is currently in daylight saving time so now we’re at
> +2, however the offset at the reference date is +1.
> That’s causing the build to fail only during winter-time 😉
>
> Chris
>
>
> Von: Christofer Dutz <[email protected]>
> Datum: Donnerstag, 12. Februar 2026 um 10:40
> An: [email protected] <[email protected]>
> Betreff: Timezone issues in test ...
>
> Hi all,
>
> As I’m currently updating my fork, I noticed there are some tests in IoTDB
> that fail if you’re not in an Asian timezone.
>
> What do you think? Would it make sense to run the tests in 2-3 time zones?
>
>
> *
> Asian TZ
> *
> Asia +8
> *
> Asia +16
>
> This would help make the build stable outside of your main area?
>
> Chris
>