Рубрики
Без рубрики

Преобразование Между java.time.Мгновенный и java.sql.Timestamp

Преобразуйте java.time.Мгновенно в java.sql.Timestamp и наоборот.

Автор оригинала: baeldung.

1. Обзор

Оба java.time.Классы Instant и java.sql.Timestamp представляют точку на временной шкале в UTC. Другими словами, они представляют собой количество наносекунд с момента эпохи Java .

В этом кратком руководстве мы преобразуем одно в другое с помощью встроенных методов Java.

2. Преобразование мгновенного в метку времени и обратно

Мы можем использовать Отметка времени.от() для преобразования Моментальный s в метки времени:

Instant instant = Instant.now();
Timestamp timestamp = Timestamp.from(instant);
assertEquals(instant.toEpochMilli(), timestamp.getTime());

И наоборот, мы можем использовать Timestamp.to Instant() для преобразования Метки времени s в Мгновенный с:

instant = timestamp.toInstant();
assertEquals(instant.toEpochMilli(), timestamp.getTime());

В любом случае, оба Моментальный и Отметка времени представляет одну и ту же точку на временной шкале.

Далее давайте рассмотрим взаимодействие между двумя классами и часовым поясом.

3. Различия в методах toString()

Вызов toString() on Instant и Timestamp ведет себя по-разному в зависимости от часового пояса. Мгновенный.toString() возвращает время в часовом поясе UTC. С другой стороны, Часовой пояс.toString() возвращает время в часовом поясе локальной машины.

Давайте посмотрим, что мы получим при вызове toString() on instant и timestamp соответственно:

Instant (in UTC): 2018-10-18T00:00:57.907Z
Timestamp (in GMT +05:30): 2018-10-18 05:30:57.907

Здесь timestamp.toString() привел к времени, которое составляет 5 часов 30 минут после времени, возвращенного instant.toString(). Это связано с тем, что часовой пояс локальной машины находится в часовом поясе GMT +5:30.

Вывод метода toString() отличается, но и метка времени , и мгновенный представляют одну и ту же точку на временной шкале .

Мы также можем проверить это, преобразовав Метку времени в часовой пояс UTC:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
formatter = formatter.withZone(TimeZone.getTimeZone("UTC").toZoneId());
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

assertThat(formatter.format(instant)).isEqualTo(df.format(timestamp));

4. Заключение

В этом кратком руководстве мы рассмотрели, как конвертировать java.time.Instant и java.sql.Timestamp классы в Java с использованием встроенных методов.

Мы также рассмотрели, как часовой пояс влияет на изменение выходных данных.

И, как всегда, полные примеры кода доступны на GitHub .