Как преобразовать java.sql.Timestamp в java.time.OffsetDateTime?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как преобразовать java.sql.Timestamp в java.time.OffsetDateTime?

Сообщение Anonymous »

Я работаю над проектом Scala, и мне нужно сопоставить тип OffsetDateTime с типом SQL Timestamp. В БД я хотел бы иметь время UTC.

Преобразование OffsetDateTime в Timestamp является простым (подсказка из этого вопроса) и работает так, как ожидалось:

Код: Выделить всё

import java.time._
import java.sql.Timestamp
val ofsdatetime = OffsetDateTime.now()
// ofsdatetime: java.time.OffsetDateTime = 2017-04-04T21:46:33.567+02:00

val tstamp = Timestamp.valueOf(ofsdatetime.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime())
// tstamp: java.sql.Timestamp = 2017-04-04 19:46:33.567
Как видите, часовой пояс удален, а отметка времени переведена на два часа назад (UTC), отлично!

Преобразование обратно отметки времени в OffsetDateTime работает не так, как ожидалось:

Код: Выделить всё

OffsetDateTime.ofInstant(Instant.ofEpochMilli(tstamp.getTime), ZoneId.systemDefault())

// java.time.OffsetDateTime = 2017-04-04T19:46:33.567+02:00
Часовой пояс был добавлен во вновь созданный OffsetDateTime, но время неверно (это все еще UTC, мне нужно, чтобы оно было адаптировано к фактическому часовому поясу).

Почему? Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/432 ... etdatetime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»