Java Date, Joda, ZonedDateTime часовой пояс всегда UTC

Я отправляю зонированную дату с помощью Joda из Android в серверную службу с помощью ZonedDateTime, но в серверной части дата всегда "UTC".

Проблема: Мне нужно сделать приложение расписания, которое работает в любой стране.

Я отправляю из своего Android-приложения дату с часовым поясом. Хорошо, я делаю это с Джодой и Джексоном, например:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssZ")
private DateTime startDate;

Хорошо, это отправка

2018-04-16T16:41:38-0300

Пока здесь, я думаю, все в порядке.

В моем бэкэнд-сервисе (Spring с Джексоном) я использую ZonedDateTime:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssZ")
private ZonedDateTime startDate;

И результат всегда UTC :(

2018-04-16T19:41:38Z[UTC]

Ради интереса, как вы регистрируете последнюю строку вывода? Возможно, что-то негласно конвертирует его в UTC? (Очевидно, что смещение UTC удается прочитать.) В качестве отдельного примечания, знание смещения UTC на самом деле не дает вам часового пояса. Если вы хотите, чтобы что-то происходило в (скажем, «15:00 каждый вторник в Лондоне»), то знание того, что смещение это вторника равно UTC + 1, вам не очень поможет. Так что вы можете в любом случае рассмотреть возможность отправки идентификатора часового пояса отдельно.

Jon Skeet 16.04.2018 22:11

Я вхожу в систему с помощью Syso - System.out.println (body.getStartDate ()).

CodeinCodeout 16.04.2018 22:16

В бэкэнде я просто перешел с ZonedDateTime на LocalDateTime. И теперь я думаю, что это работает с зонированным временем. В моей голове это не имеет смысла .. о_О

CodeinCodeout 16.04.2018 22:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
190
0

Другие вопросы по теме