Я пытаюсь сохранить в базе данных дату бронирования ресторана, но, хотя дата, которую я отправляю, верна, спящий режим хранит в базе данных дату за день до той, которую я отправил. Я не знаю, почему... это, вероятно, проблема с часовым поясом, но я не могу понять, почему... часовой пояс не должен влиять на дату.
Вот мой файл свойств весенней загрузки:
spring:
thymeleaf:
mode: HTML5
encoding: UTF-8
cache: false
jpa:
database: MYSQL
hibernate:
ddl-auto: update
properties:
hibernate:
locationId:
new_generator_mappings: false
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
jdbc:
time_zone: UTC
datasource:
driver:
class: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/databaseName?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: username
password: **********
Я из Италии, поэтому мой часовой пояс:
- GMT/UTC + 1 час по стандартному времени
- GMT/UTC + 2 часа в летнее время
В настоящее время мы UTC + 2h.
Объект, который я храню, таков:
@Entity
public class Dinner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long dinnerId;
private LocalDate date;
...
Контроллер, который я использую для перехвата запроса POST, таков:
@PreAuthorize("hasRole('USER')")
@PostMapping
public String createDinner(@RequestParam(value="dinnerDate") String dinnerDate, Principal principal, Model model){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(dinnerDate, formatter);
dinnerService.createDinner(date);
return "redirect:/dinners?dinnerDate=" + dinnerDate;
}
Который вызывает метод службы createDinner, который вызывает метод Jpa save для сохранения объекта. Я использую тимелеаф для обработки html-шаблонов. Если я отправлю дату 30.06.2019 в базу данных, я получу 29.06.2019. Когда я получаю объект «Ужин» по дате, если я вставляю 30.06.2019, я получаю ужин с датой 29.06.2019. Так что кажется, что spring странно обрабатывает дату сама по себе... учитывая какой-то часовой пояс, но я не знаю, как отключить или справиться с этим. Есть идеи?
date
? Также добавьте код для методаcreateDinner(LocalDate date)
. + посмотрите здесь: stackoverflow.com/questions/43476364/ : ... Итак, если вы хотите назначить встречу в 9 утра, вы должны использовать LocalTime или LocalDateTime, записанные в столбце базы данных типа TIMESTAMP WITHOUT TIME ZONE... - person Dmitrii Bocharov   schedule 23.06.2019