diff --git a/src/main/java/com/fasterxml/jackson/databind/util/StdDateFormat.java b/src/main/java/com/fasterxml/jackson/databind/util/StdDateFormat.java index 4d526f5ff5..8311546e42 100644 --- a/src/main/java/com/fasterxml/jackson/databind/util/StdDateFormat.java +++ b/src/main/java/com/fasterxml/jackson/databind/util/StdDateFormat.java @@ -432,14 +432,7 @@ public StringBuffer format(Date date, StringBuffer toAppendTo, protected void _format(TimeZone tz, Locale loc, Date date, StringBuffer buffer) { - Calendar cal = _calendar; - if (cal == null ) { - _calendar = cal = (Calendar)CALENDAR.clone(); - } - if (!cal.getTimeZone().equals(tz) ) { - cal.setTimeZone(tz); - } - // Note: Calendar locale not updated since we don't need it here... + Calendar cal = _getCalendar(tz); cal.setTime(date); pad4(buffer, cal.get(Calendar.YEAR)); @@ -605,10 +598,7 @@ protected Date _parseAsISO8601(String dateStr, ParsePosition bogus) if ((_timezone != null) && ('Z' != dateStr.charAt(totalLen-1))) { tz = _timezone; } - Calendar cal = new GregorianCalendar(tz, _locale); - if (_lenient != null) { - cal.setLenient(_lenient.booleanValue()); - } + Calendar cal = _getCalendar(tz); String formatStr; if (totalLen <= 10) { Matcher m = PATTERN_PLAIN.matcher(dateStr); @@ -757,6 +747,20 @@ protected void _clearFormats() { _formatRFC1123 = null; } + protected Calendar _getCalendar(TimeZone tz) { + Calendar cal = _calendar; + if (cal == null ) { + _calendar = cal = (Calendar)CALENDAR.clone(); + } + if (!cal.getTimeZone().equals(tz) ) { + cal.setTimeZone(tz); + } + cal.setLenient(isLenient()); + cal.clear(); + + return cal; + } + protected static boolean _equals(T value1, T value2) { if (value1 == value2) { return true;