@@ -70,7 +70,7 @@ public static void test_timestamp_tz() throws Exception {
7070 OffsetDateTime odt1 = OffsetDateTime .of (2020 , 10 , 7 , 13 , 15 , 7 , 12345 , ZoneOffset .ofHours (7 ));
7171 OffsetDateTime odt1Rounded = OffsetDateTime .of (2020 , 10 , 7 , 13 , 15 , 7 , 12000 , ZoneOffset .ofHours (7 ));
7272 OffsetDateTime odt2 = OffsetDateTime .of (1878 , 10 , 2 , 1 , 15 , 7 , 12345 , ZoneOffset .ofHours (-5 ));
73- OffsetDateTime odt2Rounded = OffsetDateTime .of (1878 , 10 , 2 , 1 , 15 , 8 , 13000 , ZoneOffset .ofHours (-5 ));
73+ OffsetDateTime odt2Rounded = OffsetDateTime .of (1878 , 10 , 2 , 1 , 15 , 7 , 13000 , ZoneOffset .ofHours (-5 ));
7474 OffsetDateTime odt3 = OffsetDateTime .of (2022 , 1 , 1 , 12 , 11 , 10 , 0 , ZoneOffset .ofHours (2 ));
7575 OffsetDateTime odt4 = OffsetDateTime .of (2022 , 1 , 1 , 12 , 11 , 10 , 0 , ZoneOffset .ofHours (0 ));
7676 OffsetDateTime odt5 = OffsetDateTime .of (1900 , 11 , 27 , 23 , 59 , 59 , 0 , ZoneOffset .ofHours (1 ));
@@ -102,7 +102,7 @@ public static void test_timestamp_tz() throws Exception {
102102 // Metadata tests
103103 assertEquals (Types .TIMESTAMP_WITH_TIMEZONE ,
104104 DuckDBResultSetMetaData .type_to_int (DuckDBColumnType .TIMESTAMP_WITH_TIME_ZONE ));
105- assertTrue (OffsetDateTime .class .getName (). equals ( meta .getColumnClassName (2 ) ));
105+ assertEquals (OffsetDateTime .class .getName (), meta .getColumnClassName (2 ));
106106 }
107107 } finally {
108108 TimeZone .setDefault (defaultTimeZone );
@@ -296,7 +296,7 @@ public static void duckdb_timestamp_test() throws Exception {
296296 ps .setTimestamp (1 , Timestamp .valueOf ("1905-11-02 07:59:58.12345" ));
297297 try (ResultSet rs6 = ps .executeQuery ()) {
298298 assertTrue (rs6 .next ());
299- assertEquals (rs6 .getTimestamp (1 ), Timestamp .valueOf ("1905-11-02 07:59:59 .12345" ));
299+ assertEquals (rs6 .getTimestamp (1 ), Timestamp .valueOf ("1905-11-02 07:59:58 .12345" ));
300300 }
301301 }
302302 }
@@ -555,4 +555,30 @@ public static void test_bug532_timestamp() throws Exception {
555555 }
556556 }
557557 }
558+
559+ public static void test_timestamp_before_epoch () throws Exception {
560+ TimeZone defaultTimeZone = TimeZone .getDefault ();
561+ TimeZone activeTimeZone = TimeZone .getTimeZone ("Europe/Sofia" );
562+ TimeZone .setDefault (activeTimeZone );
563+ try (Connection conn = DriverManager .getConnection (JDBC_URL ); Statement stmt = conn .createStatement ()) {
564+
565+ try (ResultSet rs = stmt .executeQuery ("SELECT TIMESTAMP '1969-01-01 00:00:00.123456'" )) {
566+ rs .next ();
567+ assertEquals (rs .getObject (1 , LocalDateTime .class ), LocalDateTime .of (1969 , 1 , 1 , 0 , 0 , 0 , 123456000 ));
568+ }
569+
570+ try (ResultSet rs = stmt .executeQuery ("SELECT TIMESTAMP_NS '1969-01-01 00:00:00.123456789'" )) {
571+ rs .next ();
572+ assertEquals (rs .getObject (1 , LocalDateTime .class ), LocalDateTime .of (1969 , 1 , 1 , 0 , 0 , 0 , 123456789 ));
573+ }
574+
575+ try (ResultSet rs = stmt .executeQuery ("SELECT TIMESTAMP WITH TIME ZONE '1969-01-01 00:00:00.123456Z'" )) {
576+ rs .next ();
577+ assertEquals (rs .getObject (1 , LocalDateTime .class ), LocalDateTime .of (1969 , 1 , 1 , 2 , 0 , 0 , 123456000 ));
578+ }
579+
580+ } finally {
581+ TimeZone .setDefault (defaultTimeZone );
582+ }
583+ }
558584}
0 commit comments