You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/08/10 14:33:03 UTC

[5/9] cayenne git commit: Changed to LocalDateTimeConverter uses LocalDate and LocalTime separately.

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 <co...@gmail.com>
Authored: Wed Aug 8 11:30:51 2018 +0000
Committer: kkomyak <co...@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")));
     }
 }