@@ -23,6 +23,8 @@ public class JacksonJodaDateFormat extends JacksonJodaFormatBase
2323
2424 protected final DateTimeFormatter _formatter ;
2525
26+ protected final DateTimeFormatter _formatterWithOffsetParsed ;
27+
2628 protected final TimeZone _jdkTimezone ;
2729
2830 protected transient DateTimeZone _jodaTimezone ;
@@ -47,6 +49,7 @@ public JacksonJodaDateFormat(DateTimeFormatter defaultFormatter)
4749 {
4850 super ();
4951 _formatter = defaultFormatter ;
52+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
5053 DateTimeZone tz = defaultFormatter .getZone ();
5154 _jdkTimezone = (tz == null ) ? null : tz .toTimeZone ();
5255 _explicitTimezone = false ;
@@ -59,6 +62,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base,
5962 {
6063 super (base , useTimestamp );
6164 _formatter = base ._formatter ;
65+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
6266 _jdkTimezone = base ._jdkTimezone ;
6367 _explicitTimezone = base ._explicitTimezone ;
6468 _adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -70,6 +74,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base,
7074 {
7175 super (base );
7276 _formatter = formatter ;
77+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
7378 _jdkTimezone = base ._jdkTimezone ;
7479 _explicitTimezone = base ._explicitTimezone ;
7580 _adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -80,6 +85,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base, TimeZone jdkTimezone)
8085 {
8186 super (base , jdkTimezone );
8287 _formatter = base ._formatter .withZone (DateTimeZone .forTimeZone (jdkTimezone ));
88+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
8389 _jdkTimezone = jdkTimezone ;
8490 _explicitTimezone = true ;
8591 _adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -90,6 +96,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base, Locale locale)
9096 {
9197 super (base , locale );
9298 _formatter = base ._formatter .withLocale (locale );
99+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
93100 _jdkTimezone = base ._jdkTimezone ;
94101 _explicitTimezone = base ._explicitTimezone ;
95102 _adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -104,6 +111,7 @@ protected JacksonJodaDateFormat(JacksonJodaDateFormat base,
104111 {
105112 super (base );
106113 _formatter = base ._formatter ;
114+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
107115 _jdkTimezone = base ._jdkTimezone ;
108116 _explicitTimezone = base ._explicitTimezone ;
109117 _adjustToContextTZOverride = adjustToContextTZOverride ;
@@ -255,20 +263,20 @@ public DateTimeFormatter createFormatterWithLocale(SerializerProvider ctxt)
255263 public DateTimeFormatter createParser (DeserializationContext ctxt )
256264 {
257265 DateTimeFormatter formatter = _formatter ;
258- if (!_explicitLocale ) {
259- Locale loc = ctxt .getLocale ();
260- if (loc != null && !loc .equals (_locale )) {
261- formatter = formatter .withLocale (loc );
262- }
263- }
264266 if (!_explicitTimezone ) {
265267 if (shouldAdjustToContextTimeZone (ctxt )) {
266268 TimeZone tz = ctxt .getTimeZone ();
267269 if (tz != null && !tz .equals (_jdkTimezone )) {
268270 formatter = formatter .withZone (DateTimeZone .forTimeZone (tz ));
269271 }
270272 } else {
271- formatter = formatter .withOffsetParsed ();
273+ formatter = _formatterWithOffsetParsed ;
274+ }
275+ }
276+ if (!_explicitLocale ) {
277+ Locale loc = ctxt .getLocale ();
278+ if (loc != null && !loc .equals (_locale )) {
279+ formatter = formatter .withLocale (loc );
272280 }
273281 }
274282 return formatter ;
0 commit comments