Преобразовать временную метку в Joda DateTime без какого-либо преобразования часового пояса

#spring #datetime #jodatime #spring-jdbc

#spring #datetime #jodatime #spring-jdbc

Вопрос:

У меня есть значение временной метки в столбце базы данных Oracle, хранящееся в UTC. Я хочу прочитать это через JdbcTemplate spring и преобразовать его в объект joda DateTime без какого-либо преобразования часового пояса, т. Е. прочитать его как есть без преобразования или потери часового пояса. Например, если входная временная метка равна 2019-03-08 15:07:37.232 , я хотел бы иметь объект DateTime со значением 2019-03-08T15:07:37.232Z Как я могу этого добиться?

Обратите внимание, что этот код — new DateTime(timestamp.getTime(), DateTimeZone.UTC)) не помогает, поскольку он предполагает, что входная временная метка находится в локальном часовом поясе, и повторно преобразует ее в UTC. Для приведенных выше входных данных 2019-03-08 15:07:37.232 результат приходит к 2019-03-08T09:37:37.232Z

Спасибо.

Комментарии:

1. Насколько я понял, если вы знаете, что временная метка базы данных находится в UTC, но Oracle не знает (это не timestamp with time zone ), ваша временная метка 2019-03-08 15:07:37.232 будет получена неправильно как эта дата и время в вашем часовом поясе, поэтому вам нужно преобразовать ее обратно в UTC. Однако Oracle и JdbcTemplate Spring не являются моим домашним полем.

Ответ №1:

Одним из решений, которое сработало, было изменение способа извлечения значения столбца временной метки из базы данных. Приведенный ниже фрагмент предназначен для преобразования значения столбца временной метки в joda DateTime без потери / преобразования часового пояса

 new DateTime(resultSet.getTimestamp("CreatedDateTime",
                        Calendar.getInstance(TimeZone.getTimeZone("UTC"))), DateTimeZone.UTC)
  

Надеюсь, это поможет и другим.

Ответ №2:

Если у вас уже есть объект DateTime, существует метод

 public DateTime withZone(DateTimeZone newZone) 
  

который вернул бы копию datetime с другим часовым поясом, сохраняя миллисекундный момент

например:- dateTime.withZone(DateTimeZone.UTC)

Комментарии:

1. У меня нет объекта DateTime. У меня есть объект Timestamp из базы данных.