Я знаю, что есть много разных учебников по временному преобразованию, но это меня очень смутило. Моя задача - прочитать UTC DATE из Oracle DB и преобразовать его в BST-время (в более удобном для чтения формате).Oracle Timestamp to BST преобразование времени
Факты:
- полей в БД имеет
DATE
типа. - Когда я выполняю запрос
SELECT
, он возвращает2011-07-12 15:26:07
результат. - Я находится в Польше, поэтому в июле TimeZone здесь
UTC+2
Что происходит:
На стороне Java я использую «классическое» подключение JDBC к БД.
Когда я выполняю Timestamp timestampDate = resultSet.getTimestamp(COLUMN_NAME)
я получаю результат ... но ...
System.out.println(timestampDate)
печатает на консоль 2011-07-12 15:26:07.0
(которая похожа на то, что я вижу в инструменте DB.
System.out.println(timestampDate.getTime());
печатает на консоль 1310477167000
(который интересно, потому что в соответствии с ms to date
преобразователем я нашел в Интернете, это в основном 2011-07-12 13:26:07.0
(2ч раньше - что-то может быть связана с польским часовым поясом на тот момент)
Wh ен я выполнить преобразование в соответствии с этим кодом:
ukDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ukDateFormatter.setTimeZone(TimeZone.getTimeZone("BST")); return ukDateFormatter.format(timestampDate.getTime());
я 2011-07-12 19:26:07
, которые я не могу объяснить.
я также пытался это
GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(timestampDate); calendar.setTimeZone(TimeZone.getTimeZone("BST")); return ukDateFormatter.format(calendar.getTime());
с тем же результатом.
Вопрос
Как правильно прочитать ДАТУ из БД Oracle в формате «часовой пояс агностик» и превратить его в BST?
Я смущен. Если поле (действительно, «столбец») в БД имеет тип данных «DATE», то это - вообще - ** не ** a «ДАТА UTC». Тип данных DATE в Oracle не имеет привязанного часового пояса. Если вы, находясь в Польше, введите значения «insert into table_t (date_column)» (to_date ('2015-12-11 10:00:00', 'yyyy-mm-dd hh24: mi: ss)) 'в вашу базу данных, и я делаю то же самое из США, то есть дату, которая будет храниться для нас обоих, и это будет дата БЕЗ часового пояса. Пожалуйста, уточните, что вы имеете в виду; когда вы читаете 'DATE', как вы решаете, в какой часовой зоне это действительно принадлежит? – mathguy
Предположим, что столбец DATE не привязан к временной зоне: - тогда почему после прочтения в «Timestamp» в Java и выполнения 'getTime' я получаю запутанный результат? - так что, как вы говорите, я должен быть в состоянии прочитать дату из БД и сделать простое преобразование с календарем ... но каким-то образом я не могу сделать это так прямолинейно. – amerykanin
Примечание. Java будет интерпретировать '' BST '', как если бы вы имели в виду «стандартное время Бангладеш». Он буквально отображает его на «Азия/Дакка». Не используйте сокращения времени в качестве идентификаторов. См. Также http://stackoverflow.com/a/41683097/634824 –