UT C время автоматически добавляется в мою переменную даты - PullRequest
0 голосов
/ 08 января 2020

Это мой json формат:

"date": "2020-01-01T00:00:00.000Z"

Однако в java я получил дату как Wed Jan 01 05:30:00 IST 2020

Ниже приведен код моего DTO

public class DateTimeDto {

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXX")
    private Date date;

}

Я использую dateTimeDto.getDate() для получения даты, отправленной в формате JSON.

Как я могу получить только дату без добавления UT C?

1 Ответ

0 голосов
/ 09 января 2020

получает дату, отправленную в формате JSON.

Не существует такого понятия, как формат JSON для значений даты и времени.

Это мой json формат:

"дата": "2020-01-01T00: 00: 00.000Z"

Z в конце означает эту дату и время следует рассматривать как UT C, смещение нуля часов, минут и секунд. Формат этого текста определен в ISO 8601 .

Разбор и Instant. Никогда не используйте Date. Используйте только классы java .time .

В стандартном формате ISO 8601 указывать форматирование не нужно.

Instant instant = Instant.parse( "2020-01-01T00:00:00.000Z" ) ;

Итак, посмотрите, как настроен момент в другом часовом поясе, примените ZoneId.

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

Знайте, что объекты даты и времени не имеют «формата». Вы можете генерировать / анализировать строки в различных форматах, но объект даты и времени является отдельным и отличным.

получает только дату

Если вы имеете в виду часть даты без время суток, вы можете извлечь LocalDate после настройки на часовой пояс, по которому вы хотите интерпретировать дату. Помните, что в любой данный момент даты различны по всему земному шару по зонам.

Instant
.parse( "2020-01-01T00:00:00.000Z" )
.atZone( ZoneId.of( "America/Montreal" ) )
.toLocalDate()

без добавленного UT C?

Там нет "добавленного" UT C. Ваше первоначальное значение представляет момент, как видно из UT C. Мы знаем, что из-за Z, что означает UT C и произносится «Зулу».

Я отправил JSON DEBUG 5436 --- [nio-8080-exe c -2] org.hibernate. SQL: выберите число (*) из dbo. (Имя_таблицы), где date = 'Ср 01 января 05:30:00 IST 2020'

Использовать смарт-объект а не просто строки в качестве аргументов в ваших запросах. Hibernate и JDB C 4.2 позволяют обмениваться java .time объектами с вашей базой данных.

Table of date-time types in Java (both legacy and modern) and in standard SQL

'Wed Jan 01 05:30:00 IST 2020'

Никогда не используйте этот ужасный формат для обмена значениями даты и времени с помощью текста. Этот формат предполагает использование Engli sh, его трудно анализировать на машине, он использует псевдо-часовой пояс из 2-4 символов, например IST, который не стандартизирован и не является уникальным (Iri sh Стандартное время? Стандартное время Индии? ).


Переполнение стека поиска для получения дополнительной информации. Все это уже освещалось много, много раз. Поиск и изучение перед публикацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...