«Миграция» от классического типа свойства java.util.Date к эквивалентному типу java.time - PullRequest
1 голос
/ 20 апреля 2019

Какой тип подходит для объявления свойства даты, представляющего поле DATETIME в базе данных.

Цель вопроса состоит в том, чтобы посмотреть, смогу ли я использовать java.time вместо java.util.Date в свойствах Date для объекта, который я сейчас строю, поскольку некоторые из методов java.util.Date устарели и обычно предложил использовать java.time.

1 Ответ

2 голосов
/ 20 апреля 2019

Для значения DATE со временем, в котором вы использовали бы тип JDBC java.sql.Date, используйте java.time.LocalDate.Существуют методы, помогающие преобразовать:

LocalDate localDate = sqlDate.toLocalDate();

Date sqlDate = Date.valueOf(localDate);

Для значения TIMESTAMP / DATETIME, когда вы использовали бы тип JDBC java.sql.Timestamp, это зависит от того,вам нужно учитывать часовой пояс.

Если приложение, его пользователи и база данных находятся в одном часовом поясе, вы можете использовать java.time.LocalDateTime.Существуют методы, помогающие преобразовать:

LocalDateTime localDateTime = timestamp.toLocalDateTime();

Timestamp timestamp = Timestamp.valueOf(localDateTime);

Если пользователи находятся в нескольких часовых поясах, вы всегда должны сохранять значения в базе данных в формате UTC, поэтому вы должны использовать java.time.Instant.Существуют методы, помогающие преобразовать:

Instant instant = timestamp.toInstant();

Timestamp timestamp = Timestamp.from(instant);

Затем вы можете преобразовать в локальный часовой пояс пользователя для отображения, например:

ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("America/New_York"));
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
...