From 9ac5964fd37fd9762fb2d0ce3b52c3e494bcffe6 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Fri, 23 Feb 2018 11:59:34 +0000 Subject: [PATCH] MNT-19261/REPO-3324 ISO8601DateFormat now handles Julian dates --- .../org/alfresco/util/ISO8601DateFormat.java | 9 ++- .../alfresco/util/ISO8601DateFormatTest.java | 57 +++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/alfresco/util/ISO8601DateFormat.java b/src/main/java/org/alfresco/util/ISO8601DateFormat.java index 70034fb8e4..5b8da9b283 100644 --- a/src/main/java/org/alfresco/util/ISO8601DateFormat.java +++ b/src/main/java/org/alfresco/util/ISO8601DateFormat.java @@ -27,10 +27,8 @@ import java.util.TimeZone; import org.alfresco.api.AlfrescoPublicApi; import org.alfresco.error.AlfrescoRuntimeException; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.IllegalInstantException; -import org.joda.time.LocalDate; +import org.joda.time.*; +import org.joda.time.chrono.GJChronology; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; @@ -215,7 +213,8 @@ public class ISO8601DateFormat DateTimeZone dtz = DateTimeZone.forTimeZone(timezone); try { - DateTime dateTime = new DateTime(isoDate, dtz); + Chronology chrono = GJChronology.getInstance(dtz); + DateTime dateTime = new DateTime(isoDate, chrono); Date date = dateTime.toDate(); return date; } diff --git a/src/test/java/org/alfresco/util/ISO8601DateFormatTest.java b/src/test/java/org/alfresco/util/ISO8601DateFormatTest.java index 5bd67d1162..0a59373ea3 100644 --- a/src/test/java/org/alfresco/util/ISO8601DateFormatTest.java +++ b/src/test/java/org/alfresco/util/ISO8601DateFormatTest.java @@ -51,6 +51,63 @@ public class ISO8601DateFormatTest extends TestCase assertEquals(date2, dateAfter2); } + public void test19000101() + { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + String test = "1900-01-01"; + Date date = ISO8601DateFormat.parse(test); + String strDate = ISO8601DateFormat.format(date); + Date dateAfter = ISO8601DateFormat.parse(strDate); + assertEquals(date, dateAfter); + } + + public void test18991231() + { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + String test = "1899-12-31"; + Date date = ISO8601DateFormat.parse(test); + String strDate = ISO8601DateFormat.format(date); + Date dateAfter = ISO8601DateFormat.parse(strDate); + assertEquals(date, dateAfter); + } + + public void test18800207() + { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + String test = "1880-02-07"; + Date date = ISO8601DateFormat.parse(test); + String strDate = ISO8601DateFormat.format(date); + Date dateAfter = ISO8601DateFormat.parse(strDate); + assertEquals(date, dateAfter); + } + + public void test15000207() // MNT-19261 JULIAN CALENDAR + { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + String test = "1500-02-07"; + Date date = ISO8601DateFormat.parse(test); + String strDate = ISO8601DateFormat.format(date); // 1500-02-07T00:00:00.000Z + Date dateAfter = ISO8601DateFormat.parse(strDate); + // Before MNT-19261 Expected Wed Jan 29 03:06:28 GMT 1500 Actual Mon Jan 20 03:06:28 GMT 1500 + // After MNT-19261 Expected and Actual: Fri Feb 07 00:00:00 GMT 1500 + assertEquals(date, dateAfter); + } + + public void test10661014() // Battle of Hastings + { + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + + String test = "10661014"; + Date date = ISO8601DateFormat.parse(test); + String strDate = ISO8601DateFormat.format(date); + Date dateAfter = ISO8601DateFormat.parse(strDate); + assertEquals(date, dateAfter); + } + public void testFormat() { TimeZone.setDefault(TimeZone.getTimeZone("PST")); // Any timezone other than UTC