Changed to LocalDateTimeConverter uses LocalDate and LocalTime separately.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/b919e3ea Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/b919e3ea Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/b919e3ea Branch: refs/heads/master Commit: b919e3ea691b9378079873285dc88887e8c02a57 Parents: abe62d3 Author: kkomyak <const1...@gmail.com> Authored: Wed Aug 8 11:30:51 2018 +0000 Committer: kkomyak <const1...@gmail.com> Committed: Wed Aug 8 11:30:51 2018 +0000 ---------------------------------------------------------------------- .../value/LocalDateTimeConverter.java | 27 ++++++++++++++++---- .../value/LocalDateTimeConverterTest.java | 4 +-- 2 files changed, 24 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/b919e3ea/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverter.java ---------------------------------------------------------------------- diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverter.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverter.java index 71ad63f..6d3e081 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverter.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverter.java @@ -1,8 +1,9 @@ package org.apache.cayenne.crypto.transformer.value; -import java.time.Instant; +import java.lang.reflect.Array; +import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneOffset; +import java.time.LocalTime; import java.util.Objects; /** @@ -20,14 +21,30 @@ public class LocalDateTimeConverter implements BytesConverter<LocalDateTime> { @Override public LocalDateTime fromBytes(byte[] bytes) { + int dateLength = 2; + int timeLength = 8; - return LocalDateTime.ofInstant(Instant.ofEpochMilli(longConverter.fromBytes(bytes)), - ZoneOffset.ofHours(0)); + byte[] date = new byte[dateLength]; + byte[] time = new byte[timeLength]; + + System.arraycopy(bytes, 0, date, 0, dateLength); + System.arraycopy(bytes, dateLength, time, 0, timeLength); + + LocalDate localDate = LocalDate.ofEpochDay(longConverter.fromBytes(date)); + LocalTime localTime = LocalTime.ofNanoOfDay(longConverter.fromBytes(time)); + return LocalDateTime.of(localDate, localTime); } @Override public byte[] toBytes(LocalDateTime value) { - return longConverter.toBytes(value.toInstant(ZoneOffset.ofHours(0)).toEpochMilli()); + byte[] date = longConverter.toBytes(value.toLocalDate().toEpochDay()); + byte[] time = longConverter.toBytes(value.toLocalTime().toNanoOfDay()); + + byte [] datetime = (byte[]) Array.newInstance(byte.class, date.length + time.length); + System.arraycopy(date,0, datetime, 0, date.length); + System.arraycopy(time,0, datetime, date.length, time.length); + + return datetime; } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/b919e3ea/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverterTest.java ---------------------------------------------------------------------- diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverterTest.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverterTest.java index fc13e9e..1cc9425 100644 --- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverterTest.java +++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/LocalDateTimeConverterTest.java @@ -18,12 +18,12 @@ public class LocalDateTimeConverterTest { @Test public void testFromBytes() throws ParseException { - assertEquals(localDate("2015-01-07 11:00:02"), LocalDateTimeConverter.INSTANCE.fromBytes(new byte[]{0, 0, 1, 74, -60, 13, 31, 80})); + assertEquals(localDate("2015-01-07 11:00:02"), LocalDateTimeConverter.INSTANCE.fromBytes(new byte[]{64, 58, 0, 0, 36, 4, -113, 36, 116, 0})); } @Test public void testToBytes() throws ParseException { - assertArrayEquals(new byte[]{0, 0, 1, 74, -60, 13, 31, 80}, + assertArrayEquals(new byte[]{64, 58, 0, 0, 36, 4, -113, 36, 116, 0}, LocalDateTimeConverter.INSTANCE.toBytes(localDate("2015-01-07 11:00:02"))); } }