Skip to content

Commit 5bccbd1

Browse files
committed
[jdbc] Incorrect DateTime results when writing numeric data with use_time_zone property
1 parent 33b1fad commit 5bccbd1

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseDateTimeValue.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,9 @@ public ClickHouseDateTimeValue update(BigInteger value) {
285285
if (value == null) {
286286
resetToNullOrEmpty();
287287
} else if (scale == 0) {
288-
set(ClickHouseValues.convertToDateTime(new BigDecimal(value, 0)));
288+
set(LocalDateTime.ofInstant(ClickHouseValues.convertToInstant(new BigDecimal(value, 0)), tz.toZoneId()));
289289
} else {
290-
set(ClickHouseValues.convertToDateTime(new BigDecimal(value, scale)));
290+
set(LocalDateTime.ofInstant(ClickHouseValues.convertToInstant(new BigDecimal(value, scale)), tz.toZoneId()));
291291
}
292292
return this;
293293
}
@@ -300,7 +300,7 @@ public ClickHouseDateTimeValue update(BigDecimal value) {
300300
if (value.scale() != scale) {
301301
value = value.setScale(scale, ClickHouseDataConfig.DEFAULT_ROUNDING_MODE);
302302
}
303-
set(ClickHouseValues.convertToDateTime(value));
303+
set(LocalDateTime.ofInstant(ClickHouseValues.convertToInstant(value), tz.toZoneId()));
304304
}
305305
return this;
306306
}

clickhouse-data/src/test/java/com/clickhouse/data/value/ClickHouseDateTimeValueTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.time.LocalTime;
1111
import java.time.ZoneOffset;
1212
import java.util.Arrays;
13+
import java.util.TimeZone;
1314
import java.util.UUID;
1415

1516
import org.testng.Assert;
@@ -29,6 +30,9 @@ public void testUpdate() {
2930
LocalDateTime.ofEpochSecond(-1L, 999000000, ZoneOffset.UTC));
3031
Assert.assertEquals(ClickHouseDateTimeValue.ofNull(3, ClickHouseValues.UTC_TIMEZONE).update(-1.1F).getValue(),
3132
LocalDateTime.ofEpochSecond(-2L, 900000000, ZoneOffset.UTC));
33+
TimeZone customTimeZone = TimeZone.getTimeZone("Asia/Shanghai");
34+
Assert.assertEquals(ClickHouseDateTimeValue.ofNull(0, customTimeZone).update(-1L).getValue(),
35+
LocalDateTime.ofEpochSecond(-1L, 0, ZoneOffset.ofHours(8)));
3236

3337
Assert.assertEquals(
3438
ClickHouseDateTimeValue.ofNull(9, ClickHouseValues.UTC_TIMEZONE)
@@ -38,6 +42,10 @@ public void testUpdate() {
3842
ClickHouseDateTimeValue.ofNull(9, ClickHouseValues.UTC_TIMEZONE)
3943
.update(new BigDecimal(BigInteger.valueOf(-1L), 9)).getValue(),
4044
LocalDateTime.ofEpochSecond(-1L, 999999999, ZoneOffset.UTC));
45+
Assert.assertEquals(
46+
ClickHouseDateTimeValue.ofNull(9, customTimeZone)
47+
.update(new BigDecimal(BigInteger.valueOf(-1L), 9)).getValue(),
48+
LocalDateTime.ofEpochSecond(-1L, 999999999, ZoneOffset.ofHours(8)));
4149
}
4250

4351
@Test(groups = { "unit" })

0 commit comments

Comments
 (0)