From 658ce3c5d3d58bf36de117ad6fda9d5f98ec1ff0 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Mon, 18 Apr 2016 12:49:16 +1200 Subject: [PATCH] #653 - Change format of all Timestamp/Date time types to use epoch millis --- .../server/type/ScalarTypeBaseDateTime.java | 12 +++++++--- .../server/type/ScalarTypeInstantTest.java | 23 +++++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java index fdb3bcbc2..66157010c 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java @@ -131,14 +131,20 @@ public abstract class ScalarTypeBaseDateTime extends ScalarTypeBase { } public String formatValue(T value) { - return convertToTimestamp(value).toString(); + // format all timestamps into epoch millis + long epochMillis = convertToMillis(value); + return Long.toString(epochMillis); } public T parse(String value) { - return convertFromTimestamp(Timestamp.valueOf(value)); + try { + long epochMillis = Long.parseLong(value); + return convertFromMillis(epochMillis); + } catch (NumberFormatException e) { + return convertFromTimestamp(Timestamp.valueOf(value)); + } } - public boolean isDateTimeCapable() { return true; } diff --git a/src/test/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstantTest.java b/src/test/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstantTest.java index e434fd9e0..ccb40bce2 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstantTest.java +++ b/src/test/java/com/avaje/ebeaninternal/server/type/ScalarTypeInstantTest.java @@ -69,11 +69,20 @@ public class ScalarTypeInstantTest { Instant now = Instant.now(); Timestamp timestamp = Timestamp.from(now); String formatted = type.formatValue(now); - assertEquals(timestamp.toString(), formatted); + assertEquals(""+timestamp.getTime(), formatted); } @Test - public void testParse() throws Exception { + public void testParse_when_epochMillis() throws Exception { + + Instant now = Instant.now(); + Timestamp timestamp = Timestamp.from(now); + Instant val1 = type.parse(""+timestamp.getTime()); + assertEquals(now, val1); + } + + @Test + public void testParse_when_timestampForm() throws Exception { Instant now = Instant.now(); Timestamp timestamp = Timestamp.from(now); @@ -81,6 +90,16 @@ public class ScalarTypeInstantTest { assertEquals(now, val1); } + @Test + public void testFormatAndParse() throws Exception { + + Instant now = Instant.now(); + + String format = type.format(now); + Instant val1 = type.parse(format); + assertEquals(now, val1); + } + @Test public void testIsDateTimeCapable() throws Exception {