From ff44325b9d916a6132bc46acd0b4ce1478f8707b Mon Sep 17 00:00:00 2001 From: Louis DeJardin Date: Fri, 24 Feb 2012 14:20:39 -0800 Subject: [PATCH] Date time for table should have precision only down to seconds. Fixes #228 DateTime parser doesn't appear to round-trip accurately lower than that. --- .../implementation/ISO8601DateConverter.java | 4 ++++ .../table/implementation/AtomReaderWriter.java | 2 +- .../DefaultEdmValueConterter.java | 2 +- .../ISO8601DateConverterTests.java | 17 +++++++++++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverter.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverter.java index e796bf00794c..9e6eef462738 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverter.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverter.java @@ -33,6 +33,10 @@ public String format(Date date) { return getFormat().format(date); } + public String shortFormat(Date date) { + return getShortFormat().format(date); + } + public Date parse(String date) throws ParseException { if (date == null) return null; diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/AtomReaderWriter.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/AtomReaderWriter.java index c5803bfb5411..75fdfe4c3a91 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/AtomReaderWriter.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/AtomReaderWriter.java @@ -179,7 +179,7 @@ private InputStream generateEntry(PropertiesWriter propertiesWriter) { writer.writeEndElement(); // title writer.writeStartElement("updated"); - writer.writeCharacters(iso8601DateConverter.format(dateFactory.getDate())); + writer.writeCharacters(iso8601DateConverter.shortFormat(dateFactory.getDate())); writer.writeEndElement(); // updated writer.writeStartElement("author"); diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/DefaultEdmValueConterter.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/DefaultEdmValueConterter.java index b062b3394ab9..ac505af93f3d 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/DefaultEdmValueConterter.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/table/implementation/DefaultEdmValueConterter.java @@ -25,7 +25,7 @@ public String serialize(String edmType, Object value) { String serializedValue; if (value instanceof Date) { - serializedValue = iso8601DateConverter.format((Date) value); + serializedValue = iso8601DateConverter.shortFormat((Date) value); } else { serializedValue = value.toString(); diff --git a/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverterTests.java b/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverterTests.java index 6f514dad26d3..bb9e36e07d9c 100644 --- a/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverterTests.java +++ b/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/blob/implementation/ISO8601DateConverterTests.java @@ -20,8 +20,6 @@ import org.junit.Test; -import com.microsoft.windowsazure.services.blob.implementation.ISO8601DateConverter; - public class ISO8601DateConverterTests { @Test public void shortFormatWorks() throws Exception { @@ -48,4 +46,19 @@ public void longFormatWorks() throws Exception { // Assert assertNotNull(result); } + + @Test + public void shortFormatRoundTrips() throws Exception { + // Arrange + ISO8601DateConverter converter = new ISO8601DateConverter(); + String value = "2012-01-12T00:35:58Z"; + + // Act + Date result = converter.parse(value); + String value2 = converter.shortFormat(result); + + // Assert + assertNotNull(result); + assertEquals(value, value2); + } }