Перетворити між java.time.Instant та java.sql.Timestamp

1. Огляд

Обидва java.time.Instant і java.sql.Timestamp класи представляють точку на шкалі часу в форматі UTC. Іншими словами, вони представляють кількість наносекунд з епохи Java.

У цьому короткому посібнику ми перетворимо одне на інше за допомогою вбудованих методів Java.

2. Перетворення миттєвого на позначення часу та назад

Ми можемо використовувати Timestamp.from () для перетворення миттєвих s в Timestamps:

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

І навпаки, ми можемо використовувати Timestamp.toInstant () для перетворення Timestamp s в Instant s:

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

У будь-якому випадку, миттєвий і часовий штампи представляють одну і ту ж точку на шкалі часу.

Далі давайте подивимось на взаємодію між двома класами та часовим поясом.

3. Відмінності методів toString ()

Виклик toString () на миттєвому та часовому відмітках поводиться по-різному щодо часового поясу. Instant.toString () повертає час у часовому поясі UTC. З іншого боку, Timezone.toString () повертає час у часовому поясі локальної машини.

Давайте подивимося, що ми отримуємо при виклику toString () на миттєвий та часовий пояс відповідно:

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:

DateFormat df = DateFormat.getDateTimeInstance(); df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SS'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); assertEquals(instant.toString(), df.format(timestamp).toString());

4. Висновок

У цьому короткому посібнику ми побачили, як конвертувати між класами java.time.Instant та java.sql.Timestamp у Java за допомогою вбудованих методів.

Ми також подивились, як часовий пояс впливає на те, як змінюється вихід.

І, як завжди, повні приклади коду доступні на GitHub.