Я использую Jackson 1.9.7 и обнаружил, что выполнение следующих действий не решает мою проблему с часовым поясом сериализации / десериализации:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
objectMapper.setDateFormat(dateFormat);
Вместо «2014-02-13T20: 09: 09.859Z» в сообщении JSON я получаю «2014-02-13T08: 09: 09.859 + 0000», что, очевидно, неверно. У меня нет времени просматривать исходный код библиотеки Джексона, чтобы выяснить, почему это происходит, однако я обнаружил, что если я просто укажу предоставленный Джексоном класс ISO8601DateFormat
для метода ObjectMapper.setDateFormat
, дата будет правильной.
За исключением того, что это не переводит миллисекунды в тот формат, который мне нужен, поэтому я переклассифицировал класс ISO8601DateFormat
и переопределил format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
метод. * * 1010
/**
* Provides a ISO8601 date format implementation that includes milliseconds
*
*/
public class ISO8601DateFormatWithMillis extends ISO8601DateFormat {
/**
* For serialization
*/
private static final long serialVersionUID = 2672976499021731672L;
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition)
{
String value = ISO8601Utils.format(date, true);
toAppendTo.append(value);
return toAppendTo;
}
}