Pavel Pereslegin created IGNITE-22056: -----------------------------------------
Summary: Jdbc. Incorrect value can be read for a column with Instant. Key: IGNITE-22056 URL: https://issues.apache.org/jira/browse/IGNITE-22056 Project: Ignite Issue Type: Bug Reporter: Pavel Pereslegin For dates (before 1900), we can get the incorrect value using the ResultSet#getTimestamp method (for a column with Instant value (TIMESTAMP WITH TIME ZONE) ). Reproducer {code:java} @Test public void testTimestamps() throws SQLException { // Ignoring time zone. TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.of("UTC"))); try (Connection conn = DriverManager.getConnection(URL)) { try (Statement stmt = conn.createStatement()) { stmt.execute( "CREATE TABLE t (tt_id INT PRIMARY KEY, dt timestamp, ts timestamp with local time zone);" + "INSERT INTO t VALUES(0, '1581-12-31 00:00:00', '1581-12-31 00:00:00')" ); } try (Statement stmt = conn.createStatement()) { try (ResultSet rs = stmt.executeQuery("select dt, ts from t")) { assertTrue(rs.next()); LocalDateTime ldt = LocalDateTime.parse("1581-12-31T00:00:00"); assertEquals(ldt, rs.getObject("dt")); assertEquals(ldt.atOffset(ZoneOffset.UTC).toInstant(), rs.getObject("ts")); Timestamp tsFromDateTime = rs.getTimestamp("dt"); Timestamp tsFromTimestamp = rs.getTimestamp("ts"); assertEquals(tsFromDateTime, tsFromTimestamp); // fails // Expected :1581-12-31 00:00:00.0 // Actual :1581-12-21 00:00:00.0 } } } } {code} The main problem is the poor implementation of java.sql.Timestamp. To be specific, {{valueOf(LocalDateTime)}} and {{from(Instant)}} constructs different timestamps, even for the same dates. {code:java} TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Instant instant = Instant.parse("1581-12-31T00:00:00Z"); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("UTC")); Timestamp rightMillisTs = Timestamp.from(instant); Timestamp wrongMillisTs = Timestamp.valueOf(localDateTime); // This alidation fails. assertEquals(rightMillisTs.getTime(), wrongMillisTs.getTime()); // Expected :-12244176000000 // Actual :-12243312000000 {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)