1313import java .time .LocalDate ;
1414import java .time .LocalDateTime ;
1515import java .util .Calendar ;
16+ import java .util .GregorianCalendar ;
1617import java .util .Map ;
18+ import java .util .TimeZone ;
1719
1820import com .clickhouse .client .api .data_formats .ClickHouseBinaryFormatReader ;
1921import com .clickhouse .client .api .metadata .TableSchema ;
@@ -33,6 +35,7 @@ public class ResultSetImpl implements ResultSet, JdbcV2Wrapper {
3335 private boolean closed ;
3436 private final StatementImpl parentStatement ;
3537 private boolean wasNull ;
38+ private final Calendar defaultCalendar ;
3639
3740 public ResultSetImpl (StatementImpl parentStatement , QueryResponse response , ClickHouseBinaryFormatReader reader ) {
3841 this .parentStatement = parentStatement ;
@@ -41,6 +44,7 @@ public ResultSetImpl(StatementImpl parentStatement, QueryResponse response, Clic
4144 this .metaData = new com .clickhouse .jdbc .metadata .ResultSetMetaData (this );
4245 this .closed = false ;
4346 this .wasNull = false ;
47+ this .defaultCalendar = new GregorianCalendar (TimeZone .getTimeZone ("UTC" ));
4448 }
4549
4650 private void checkClosed () throws SQLException {
@@ -1234,7 +1238,15 @@ public Date getDate(int columnIndex, Calendar cal) throws SQLException {
12341238 @ Override
12351239 public Date getDate (String columnLabel , Calendar cal ) throws SQLException {
12361240 checkClosed ();
1237- return getDate (columnLabel );
1241+ Date date = getDate (columnLabel );
1242+ if (date == null ) {
1243+ return null ;
1244+ }
1245+ LocalDate d = date .toLocalDate ();
1246+ Calendar c = (Calendar )( cal != null ? cal : defaultCalendar ).clone ();
1247+ c .clear ();
1248+ c .set (d .getYear (), d .getMonthValue () - 1 , d .getDayOfMonth (), 0 , 0 , 0 );
1249+ return new Date (c .getTimeInMillis ());
12381250 }
12391251
12401252 @ Override
0 commit comments