@@ -23,6 +23,8 @@ public class JacksonJodaDateFormat extends JacksonJodaFormatBase
23
23
24
24
protected final DateTimeFormatter _formatter ;
25
25
26
+ protected final DateTimeFormatter _formatterWithOffsetParsed ;
27
+
26
28
protected final TimeZone _jdkTimezone ;
27
29
28
30
protected transient DateTimeZone _jodaTimezone ;
@@ -47,6 +49,7 @@ public JacksonJodaDateFormat(DateTimeFormatter defaultFormatter)
47
49
{
48
50
super ();
49
51
_formatter = defaultFormatter ;
52
+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
50
53
DateTimeZone tz = defaultFormatter .getZone ();
51
54
_jdkTimezone = (tz == null ) ? null : tz .toTimeZone ();
52
55
_explicitTimezone = false ;
@@ -59,6 +62,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base,
59
62
{
60
63
super (base , useTimestamp );
61
64
_formatter = base ._formatter ;
65
+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
62
66
_jdkTimezone = base ._jdkTimezone ;
63
67
_explicitTimezone = base ._explicitTimezone ;
64
68
_adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -70,6 +74,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base,
70
74
{
71
75
super (base );
72
76
_formatter = formatter ;
77
+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
73
78
_jdkTimezone = base ._jdkTimezone ;
74
79
_explicitTimezone = base ._explicitTimezone ;
75
80
_adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -80,6 +85,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base, TimeZone jdkTimezone)
80
85
{
81
86
super (base , jdkTimezone );
82
87
_formatter = base ._formatter .withZone (DateTimeZone .forTimeZone (jdkTimezone ));
88
+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
83
89
_jdkTimezone = jdkTimezone ;
84
90
_explicitTimezone = true ;
85
91
_adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -90,6 +96,7 @@ public JacksonJodaDateFormat(JacksonJodaDateFormat base, Locale locale)
90
96
{
91
97
super (base , locale );
92
98
_formatter = base ._formatter .withLocale (locale );
99
+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
93
100
_jdkTimezone = base ._jdkTimezone ;
94
101
_explicitTimezone = base ._explicitTimezone ;
95
102
_adjustToContextTZOverride = base ._adjustToContextTZOverride ;
@@ -104,6 +111,7 @@ protected JacksonJodaDateFormat(JacksonJodaDateFormat base,
104
111
{
105
112
super (base );
106
113
_formatter = base ._formatter ;
114
+ _formatterWithOffsetParsed = _formatter .withOffsetParsed ();
107
115
_jdkTimezone = base ._jdkTimezone ;
108
116
_explicitTimezone = base ._explicitTimezone ;
109
117
_adjustToContextTZOverride = adjustToContextTZOverride ;
@@ -255,20 +263,20 @@ public DateTimeFormatter createFormatterWithLocale(SerializerProvider ctxt)
255
263
public DateTimeFormatter createParser (DeserializationContext ctxt )
256
264
{
257
265
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
- }
264
266
if (!_explicitTimezone ) {
265
267
if (shouldAdjustToContextTimeZone (ctxt )) {
266
268
TimeZone tz = ctxt .getTimeZone ();
267
269
if (tz != null && !tz .equals (_jdkTimezone )) {
268
270
formatter = formatter .withZone (DateTimeZone .forTimeZone (tz ));
269
271
}
270
272
} 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 );
272
280
}
273
281
}
274
282
return formatter ;
0 commit comments