Default timezone for DateTime deserialization with Jackson (Joda-Time module)
datetime, deserialization, jackson, java, jodatime
Solution
The source code for `DateTimeDeserializer` shows it uses the timezone from `DeserializationContext` which is provided by `ObjectMapper` during deserialization. If you look at `ObjectMapper` API, you will see there is method for setting the timezone:
public ObjectMapper setTimeZone(TimeZone tz)
Thus you can use this method to configure your `ObjectMapper` and set the timezone to the correct one.
For what concerns the default value, it seems the Javadoc says one thing, but the code shows another.
Javadoc for `ObjectMapper.setTimeZone(TimeZone tz)`:
/**
* Method for overriding default TimeZone to use for formatting.
* Default value used is {@link TimeZone#getDefault()}.
*/
However, the code sets the timezone explicitly on:
protected final static BaseSettings DEFAULT_BASE = new BaseSettings(
...
// TimeZone.getDefault()
TimeZone.getTimeZone("GMT"),
...
So, apparently, it actually uses GMT, and not the default JVM default.
I would say that probably the best choice would be not relying on this and set it by yourself on `ObjectMapper.setTimeZone(TimeZone tz)`.
Problem
This question is about deserialization to Joda-Time DateTime using jackson-datatype-joda module for Jackson. Is there a default timezone that date strings will be deserialized into? If so, what is it? Is it UTC? I need to ask this because the Jackson documentation is not specific for Joda-Time DateTime. I found in this article (http://wiki.fasterxml.com/JacksonFAQDateHandling) that Jackson will assume GMT as the default time zone for deserializing into `java.util.Date` or `java.util.Calendar`. However, there is no mention of Joda-Time data types in this document. In addition, I specifically need strings to deserialize into `DateTime` objects using the UTC timezone, not GMT: although these two zones are very similar, there are some small differences and therefore GMT will not be feasible for me. Thank you.