#java #spring #spring-boot #date #datetime
Вопрос:
У меня есть метод, у которого есть параметр с аннотацией @DateTimeFormat.
public static void exampleMethod(@ApiParam(value = "date", required = true)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date) {...}
Когда он получает «2021-10-12», переменная даты по какой-то причине содержит «Пн 11 октября 23:00:00 МСК 2021». В моем запросе нет времени, но я получаю предыдущую дату и всегда 23:00:00.
Мне действительно нужно использовать Date
тип данных здесь, так что можно сделать, чтобы решить эту проблему?
Заранее спасибо.
Комментарии:
1. Я бы не стал пересекать посылки. Используйте более старый SimpleDateFormat для форматирования java.util. Дата вместо более новой версии java.time. Формат даты и времени.
2. Это из-за часового пояса. Ваша переменная даты имеет
MSK
часовой пояс и выглядит так, как будто вы находитесь в часовом поясе MSK.3. @duffymo, Но можно ли это сделать в параметрах метода, как в моем примере?
4.
2021-10-12
(или2021-10-12T00:00
) в UTC должно бытьMon Oct 12 03:00:00 MSK 2021
, потому что MSK-это GMT 3. Трудно сказать что-либо помимо этого, не заглядывая в полный код. Что касается времени, отображаемого в строке :java.util.Date
не сохраняет часовой пояс или формат; это просто оболочка вокруг количества миллисекунд. Любое значение, которое вы видите, — это просто строка, отформатированная какEEE MMM dd HH:mm:ss zzz yyyy
часовой пояс по умолчанию и использующая его.
Ответ №1:
Если кто-нибудь когда-нибудь столкнется с этой проблемой, мне удалось решить ее с помощью java.sql.Date
(поскольку это подкласс java.util.Date
) и @JsonFormat
аннотации одновременно:
public static void exampleMethod(@ApiParam(value = "date", required = true)
@JsonFormat(pattern="yyyy-MM-dd") Date date) {...}