Я предполагаю, что вы имеете в виду java.sql.Timestamp
, который вы получаете из базы данных SQL, где это была временная метка с часовым поясом или без него.
Использовать java.time
Во-первых, вам это не нужно. Класс Timestamp
плохо спроектирован и давно устарел. Вместо этого предпочитайте получать из вашей базы данных:
- Если столбцом вашей базы данных является
timestamp with time zone
, что и должно быть, то получите OffsetDateTime
(с некоторыми драйверами JDBC Instant
тоже работает).
- Если столбец вашей базы данных
timestamp
без часового пояса (не рекомендуется), тогда получите LocalDateTime
. Проблема в том, что LocalDateTime
- это дата и время без часового пояса, поэтому не является уникальным моментом времени, поэтому не подходит для отметки времени.
Все упомянутые типы взяты из java.time, современного Java-API даты и времени, и все они имеют точность наносекунды.
* * 1 022 Пример: * 1 023 *
OffsetDateTime odt = yourResultSet.getObject("my_timestamp_col", OffsetDateTime.class);
System.out.println(odt);
Пример вывода:
2018-11-29T22: 34: 56.123456789Z
Трейлинг Z
на выходе означает часовой пояс Зулу, UTC или смещение нуля.
Вы хотели применить данный часовой пояс. Так, например:
ZonedDateTime zdt = odt.atZoneSameInstant(ZoneId.of("America/Guyana"));
System.out.println(zdt);
2018-11-29T18: 34: 56.123456789-04: 00 [Америка / Гайана]
Для получения типа из java.time из набора результатов с использованием ResultSet.getObject
требуется JDBC 4.2 (или современная реализация JPA или то, что вы используете для доступа к данным). У большинства из нас это есть.
Обработка метки времени из устаревшего API
В случае, если вы либо еще не получили JDBC 4.2, либо получаете Timestamp
от устаревшего API, который вы не можете себе позволить изменить прямо сейчас:
ZonedDateTime zdt = yourTimestamp.toInstant()
.atZone(ZoneId.of("America/Guyana"));
Если у вас есть особые требования к выводу строки, используйте DateTimeFormatter
для форматирования ZonedDateTime
. Это описано во многих местах, просто поиск.
Link
Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.