diff --git a/clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateTimeValue.java b/clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateTimeValue.java index bdbc11193..6db0a390b 100644 --- a/clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateTimeValue.java +++ b/clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateTimeValue.java @@ -285,9 +285,9 @@ public ClickHouseDateTimeValue update(BigInteger value) { if (value == null) { resetToNullOrEmpty(); } else if (scale == 0) { - set(ClickHouseValues.convertToDateTime(new BigDecimal(value, 0))); + set(LocalDateTime.ofInstant(ClickHouseValues.convertToInstant(new BigDecimal(value, 0)), tz.toZoneId())); } else { - set(ClickHouseValues.convertToDateTime(new BigDecimal(value, scale))); + set(LocalDateTime.ofInstant(ClickHouseValues.convertToInstant(new BigDecimal(value, scale)), tz.toZoneId())); } return this; } @@ -300,7 +300,7 @@ public ClickHouseDateTimeValue update(BigDecimal value) { if (value.scale() != scale) { value = value.setScale(scale, ClickHouseDataConfig.DEFAULT_ROUNDING_MODE); } - set(ClickHouseValues.convertToDateTime(value)); + set(LocalDateTime.ofInstant(ClickHouseValues.convertToInstant(value), tz.toZoneId())); } return this; } diff --git a/clickhouse-data/src/test/java/com/clickhouse/data/value/ClickHouseDateTimeValueTest.java b/clickhouse-data/src/test/java/com/clickhouse/data/value/ClickHouseDateTimeValueTest.java index 02a79833f..3ce643bef 100644 --- a/clickhouse-data/src/test/java/com/clickhouse/data/value/ClickHouseDateTimeValueTest.java +++ b/clickhouse-data/src/test/java/com/clickhouse/data/value/ClickHouseDateTimeValueTest.java @@ -10,6 +10,7 @@ import java.time.LocalTime; import java.time.ZoneOffset; import java.util.Arrays; +import java.util.TimeZone; import java.util.UUID; import org.testng.Assert; @@ -29,6 +30,9 @@ public void testUpdate() { LocalDateTime.ofEpochSecond(-1L, 999000000, ZoneOffset.UTC)); Assert.assertEquals(ClickHouseDateTimeValue.ofNull(3, ClickHouseValues.UTC_TIMEZONE).update(-1.1F).getValue(), LocalDateTime.ofEpochSecond(-2L, 900000000, ZoneOffset.UTC)); + TimeZone customTimeZone = TimeZone.getTimeZone("Asia/Shanghai"); + Assert.assertEquals(ClickHouseDateTimeValue.ofNull(0, customTimeZone).update(-1L).getValue(), + LocalDateTime.ofEpochSecond(-1L, 0, ZoneOffset.ofHours(8))); Assert.assertEquals( ClickHouseDateTimeValue.ofNull(9, ClickHouseValues.UTC_TIMEZONE) @@ -38,6 +42,10 @@ public void testUpdate() { ClickHouseDateTimeValue.ofNull(9, ClickHouseValues.UTC_TIMEZONE) .update(new BigDecimal(BigInteger.valueOf(-1L), 9)).getValue(), LocalDateTime.ofEpochSecond(-1L, 999999999, ZoneOffset.UTC)); + Assert.assertEquals( + ClickHouseDateTimeValue.ofNull(9, customTimeZone) + .update(new BigDecimal(BigInteger.valueOf(-1L), 9)).getValue(), + LocalDateTime.ofEpochSecond(-1L, 999999999, ZoneOffset.ofHours(8))); } @Test(groups = { "unit" })