2013-12-03 3 views
0

Я использую конфигуратор jackson для сериализации - десериализовать дату.Дата настройки Java jackson

Я использую этот

SerializationConfig serConfig = mapper.getSerializationConfig(); 
serConfig.setDateFormat(new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z")); 

DeserializationConfig deserializationConfig = mapper.getDeserializationConfig(); 
deserializationConfig.setDateFormat(new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z")); 

Теперь, если я прохожу 10/10/2013 02:30:00 EST это позволяет мне сделать это, но 10/10/2013 02:30:00 дает мне ошибку.

Как сделать конфигуратор разобрать оба?

+0

Если вы имеете в виду [Jackson JSON Processor] (http://wiki.fasterxml.com/JacksonHome), вы должны сказать это явно. –

ответ

1

Вы не должны передавать дату и время без часового пояса. Сделать это бессмысленно, без смысла. Как сохранение местного номера телефона без кода города.

Jackson сохраняет свои даты, как следует, в UTC часовом поясе. Это означает отсутствие часового пояса. Таким образом, дата, когда вы проходите, должна иметь часовой пояс, чтобы Джексон мог настроить значение на UTC. Я действительно не знаю или не пользуюсь Джексоном, но это то, что говорит док.

Если код, передающий дату-время, знает или может вывести или определить часовой пояс, он должен сделать это и добавить часовой пояс.

Если вы проходите дату-время, указанное в UTC, добавьте часовой пояс «Z», для Zulu.

Остерегайтесь: использование трехбуквенных кодов часовых поясов не является хорошей практикой. Они не стандартизированы и часто имеют дубликаты. Значение EST в вашем примере означает как минимум 3 часовых пояса по всему миру: US, Australia, and Brazil. Вместо этого используйте name of time zone.

Совет. Если вы работаете с датами на Java, приобретите стороннюю библиотеку Joda-Time, а не используйте классы java.util.Date/Calendar.