diff --git a/src/main/java/com/fasterxml/jackson/databind/util/ISO8601Utils.java b/src/main/java/com/fasterxml/jackson/databind/util/ISO8601Utils.java index bdf12a1b62..24477ea964 100644 --- a/src/main/java/com/fasterxml/jackson/databind/util/ISO8601Utils.java +++ b/src/main/java/com/fasterxml/jackson/databind/util/ISO8601Utils.java @@ -152,6 +152,15 @@ public static Date parse(String date, ParsePosition pos) throws ParseException { int minutes = 0; int seconds = 0; int milliseconds = 0; // always use 0 otherwise returned date will include millis of current time + + // if the value has no time component (and no time zone), we are done + if (!checkOffset(date, offset, 'T') && (date.length() <= offset)) { + Calendar calendar = new GregorianCalendar(year, month - 1, day); + + pos.setIndex(offset); + return calendar.getTime(); + } + if (checkOffset(date, offset, 'T')) { // extract hours, minutes, seconds and milliseconds diff --git a/src/test/java/com/fasterxml/jackson/databind/util/ISO8601DateFormatTest.java b/src/test/java/com/fasterxml/jackson/databind/util/ISO8601DateFormatTest.java index 670ae80ab0..580a72cedb 100644 --- a/src/test/java/com/fasterxml/jackson/databind/util/ISO8601DateFormatTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/util/ISO8601DateFormatTest.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.BaseMapTest; -import com.fasterxml.jackson.databind.util.ISO8601DateFormat; /** * @see ISO8601DateFormat @@ -33,6 +32,16 @@ public void testFormat() { public void testParse() throws Exception { Date result = df.parse("2007-08-13T19:51:23Z"); assertEquals(date, result); + + // Test parsing date-only values with and without a timezone designation + Date dateOnly = df.parse("2007-08-14"); + Calendar cal = new GregorianCalendar(2007, 8-1, 14); + assertEquals(cal.getTime(), dateOnly); + + dateOnly = df.parse("2007-08-14Z"); + cal = new GregorianCalendar(2007, 8-1, 14); + cal.setTimeZone(TimeZone.getTimeZone("GMT")); + assertEquals(cal.getTime(), dateOnly); } public void testPartialParse() throws Exception {