Я работаю над Rest API в Spring Boot, и мы используем фантастическую библиотеку Joda Time. Поскольку мой сервер настроен на работу в часовом поясе UTC, нет необходимости использовать во всем приложении DateTime
, в котором есть информация DateTimeZone
. Мы предпочитаем использовать LocalDateTime
для хранения всех дат в системе.
Теперь вопрос о печати LocalDateTime
в формате IOS 8601. Посмотрите на код ниже:
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // server timezone
DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); // yyyy-MM-dd'T'HH:mm:ss.SSSZZ
LocalDateTime createdAtLocalDateTime = LocalDateTime.now();
DateTime createdAtDateTime = user.getCreatedAt().toDateTime(DateTimeZone.UTC);
logger.info("DT: {}", fmt.print(createdAtDateTime));
logger.info("LDT: {}", fmt.print(createdAtLocalDateTime));
Это выводит такие результаты:
DT: 2019-03-20T20:19:19.691Z
LDT: 2019-03-20T20:37:00.642
Таким образом, в конце сериализации LocalDateTime
нет Z
, но при сериализации DateTime
в часовом поясе UTC Z
.
Теперь вопрос : Как я могу сконфигурировать средство форматирования для вывода этой информации TimeZone в конце (этой буквы Z
) во время сериализации LocalDateTime
экземпляров. Я знаю, что это всегда в UTC, но одна из наших библиотек-потребителей ожидает эту информацию о часовом поясе, и мы, к сожалению, не можем изменить код в ней.
Лучший вопрос : Как настроить Джексона ObjectMapper
для сериализации LocalDateTime
в json с этой Z
информацией в конце?
Добавление в форматер fmt.withZoneUTC()
не работает.