Почему LocalDate и LocalDateTime хранятся в PostgreSQL разными подходами? ⇐ JAVA
-
Гость
Почему LocalDate и LocalDateTime хранятся в PostgreSQL разными подходами?
Есть идеи, почему LocalDate и LocalDateTime хранятся с использованием двух разных подходов?
Запрос:
{ "dateUsingLocalDate": "11.10.2023", "dateTimeUsingLocalDateTime": "2023-10-11T12:30:00" } сопоставляется с классом Java:
@Data @СуперСтроитель @NoArgsConstructor @AllArgsConstructor запрос общественного класса { частная LocalDate dateUsingLocalDate; частный LocalDateTime dateTimeUsingLocalDateTime; } Затем я использую геттеры и сеттеры для сопоставления экземпляра Java-класса, который отображает таблицу PostgreSQL (все столбцы имеют временную метку псевдоним временной метки без часового пояса):
@Data @NoArgsConstructor @AllArgsConstructor @СуперСтроитель @Сущность @Table(name = "test_postgre") общественный класс TestPostgre { @Идентификатор @Column(name = "pk", nullable = false) частная строка ПК; @Column(name = "date_using_localdate", nullable = false) частная LocalDate dateUsingLocalDate; @Column(name = "datetime_using_localdatetime", nullable = false) частный LocalDateTime dateTimeUsingLocalDateTime; } и когда экземпляр TestPostgre сохраняется в PostgreSQL с помощью JpaRepository
@Repository общедоступный интерфейс TestPostgreRepository расширяет JpaRepository { } Я вижу это:
[*]LocalDate со значением 2023-10-11 сохраняется в PostgreSQL как 2023-10-11 00:00:00.000 [*]LocalDateTime со значением 2023-10-11T12:30 сохраняется в PostgreSQL как 2023-10-11 05:30:00.000.
По сути, LocalDateTime сохраняется с учетом часового пояса системы (Азия/Токио) и часового пояса PostgreSQL (Европа/Рим), поэтому значение даты и времени составляет 7 часов назад.
Но по какой-то причине этого не происходит для LocalDate, который сохраняется как есть, без учета часового пояса.
При этом MongoDB учитывает часовой пояс для обоих классов.
[*]LocalDate со значением 2023-10-11 сохраняется в MongoDB как 2023-10-10T15:00:00.000+0000 [*]LocalDateTime со значением 2023-10-11T12:30:00 сохраняется в MongoDB как 2023-10-11T03:30:00.000+0000
П.С. Я знаю, что существуют и другие классы, которые также хранят зону, чтобы избежать подобных проблем, но мне просто интересно узнать, почему эти два класса обрабатываются по-разному.
Есть идеи, почему LocalDate и LocalDateTime хранятся с использованием двух разных подходов?
Запрос:
{ "dateUsingLocalDate": "11.10.2023", "dateTimeUsingLocalDateTime": "2023-10-11T12:30:00" } сопоставляется с классом Java:
@Data @СуперСтроитель @NoArgsConstructor @AllArgsConstructor запрос общественного класса { частная LocalDate dateUsingLocalDate; частный LocalDateTime dateTimeUsingLocalDateTime; } Затем я использую геттеры и сеттеры для сопоставления экземпляра Java-класса, который отображает таблицу PostgreSQL (все столбцы имеют временную метку псевдоним временной метки без часового пояса):
@Data @NoArgsConstructor @AllArgsConstructor @СуперСтроитель @Сущность @Table(name = "test_postgre") общественный класс TestPostgre { @Идентификатор @Column(name = "pk", nullable = false) частная строка ПК; @Column(name = "date_using_localdate", nullable = false) частная LocalDate dateUsingLocalDate; @Column(name = "datetime_using_localdatetime", nullable = false) частный LocalDateTime dateTimeUsingLocalDateTime; } и когда экземпляр TestPostgre сохраняется в PostgreSQL с помощью JpaRepository
@Repository общедоступный интерфейс TestPostgreRepository расширяет JpaRepository { } Я вижу это:
[*]LocalDate со значением 2023-10-11 сохраняется в PostgreSQL как 2023-10-11 00:00:00.000 [*]LocalDateTime со значением 2023-10-11T12:30 сохраняется в PostgreSQL как 2023-10-11 05:30:00.000.
По сути, LocalDateTime сохраняется с учетом часового пояса системы (Азия/Токио) и часового пояса PostgreSQL (Европа/Рим), поэтому значение даты и времени составляет 7 часов назад.
Но по какой-то причине этого не происходит для LocalDate, который сохраняется как есть, без учета часового пояса.
При этом MongoDB учитывает часовой пояс для обоих классов.
[*]LocalDate со значением 2023-10-11 сохраняется в MongoDB как 2023-10-10T15:00:00.000+0000 [*]LocalDateTime со значением 2023-10-11T12:30:00 сохраняется в MongoDB как 2023-10-11T03:30:00.000+0000
П.С. Я знаю, что существуют и другие классы, которые также хранят зону, чтобы избежать подобных проблем, но мне просто интересно узнать, почему эти два класса обрабатываются по-разному.
Мобильная версия