From 2ad520282319da9a03061b8c744e51a4ffdf94a2 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Wed, 28 Feb 2018 12:28:10 +0100 Subject: [PATCH] dateutil: constistency of tzdate input and output (#2392) Signed-off-by: Yoan Blanc Signed-off-by: Daan Hoogland --- .../main/java/com/cloud/utils/DateUtil.java | 10 ++++-- .../java/com/cloud/utils/DateUtilTest.java | 33 ++++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/DateUtil.java b/utils/src/main/java/com/cloud/utils/DateUtil.java index 7787e1be3ba..9f046d11446 100644 --- a/utils/src/main/java/com/cloud/utils/DateUtil.java +++ b/utils/src/main/java/com/cloud/utils/DateUtil.java @@ -38,10 +38,14 @@ public class DateUtil { return new Date(); } - // yyyy-MM-ddTHH:mm:ssZxxxx + // yyyy-MM-ddTHH:mm:ssZZZZ or yyyy-MM-ddTHH:mm:ssZxxxx public static Date parseTZDateString(String str) throws ParseException { - DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'Z"); - return dfParse.parse(str); + try { + return s_outputFormat.parse(str); + } catch (ParseException e) { + final DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'Z"); + return dfParse.parse(str); + } } public static Date parseDateString(TimeZone tz, String dateString) { diff --git a/utils/src/test/java/com/cloud/utils/DateUtilTest.java b/utils/src/test/java/com/cloud/utils/DateUtilTest.java index ba88505f04d..190adeab2db 100644 --- a/utils/src/test/java/com/cloud/utils/DateUtilTest.java +++ b/utils/src/test/java/com/cloud/utils/DateUtilTest.java @@ -27,6 +27,9 @@ import java.util.TimeZone; import com.cloud.utils.DateUtil.IntervalType; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; public class DateUtilTest { @@ -44,17 +47,25 @@ public class DateUtilTest { if (args.length == 2) { System.out.println("Next run time: " + DateUtil.getNextRunTime(IntervalType.getIntervalType(args[0]), args[1], "GMT", time).toString()); } - - time = new Date(); - DateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'Z"); - String str = dfDate.format(time); - System.out.println("Formated TZ time string : " + str); - try { - Date dtParsed = DateUtil.parseTZDateString(str); - System.out.println("Parsed TZ time string : " + dtParsed.toString()); - } catch (ParseException e) { - System.err.println("Parsing failed\n string : " + str + "\nexception :" + e.getLocalizedMessage()); - } } + @Test + public void zonedTimeFormatLegacy() throws ParseException { + Date time = new Date(); + DateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'Z"); + String str = dfDate.format(time); + Date dtParsed = DateUtil.parseTZDateString(str); + + assertEquals(time.toString(), dtParsed.toString()); + } + + @Test + public void zonedTimeFormat() throws ParseException { + Date time = new Date(); + DateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + String str = dfDate.format(time); + Date dtParsed = DateUtil.parseTZDateString(str); + + assertEquals(time.toString(), dtParsed.toString()); + } }