wei.chou created CALCITE-6896: --------------------------------- Summary: Improper Timezone Handling in SqlFunctions#internalToTimestamp Key: CALCITE-6896 URL: https://issues.apache.org/jira/browse/CALCITE-6896 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.39.0 Reporter: wei.chou
{*}Error Cause{*}: Improper Timezone Handling in method of SqlFunctions.internalToTimestamp(long v) # {{LocalDateTime.ofEpochSecond()}} generates a UTC-based timestamp but produces a *timezone-less* {{LocalDateTime}} object. # {{Timestamp.valueOf(dateTime)}} implicitly uses the *JVM's default timezone* to interpret the {{{}LocalDateTime{}}}, rather than preserving the UTC context. This creates a hidden timezone conversion. {*}Example{*}: If {{v = 0}} (UTC epoch: 1970-01-01 00:00:00) and the system timezone is UTC+8: * {{LocalDateTime}} correctly represents 1970-01-01 00:00:00 (UTC) * {{Timestamp.valueOf()}} treats it as 1970-01-01 00:00:00 {*}in UTC+8{*}, resulting in an actual UTC time of 1969-12-31 16:00:00 (8-hour offset error). {*}Correct Approach{*}: {code:java} // Direct conversion without timezone ambiguity public static java.sql.Timestamp internalToTimestamp(long v) { return new java.sql.Timestamp(v); // Milliseconds directly map to SQL Timestamp } // Or using Instant public static java.sql.Timestamp internalToTimestamp(long v) { return Timestamp.from(Instant.ofEpochMilli(v)); } {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)