2016-07-08 3 views
0

В моем коде, когда я сохраняю одну дату как дату в восточном часовом поясе, она отображается корректно, когда мы ее просматриваем. Но в часовом поясе Тихого океана она показывает предыдущую дату, т.е. вчерашней даты. Мы сохраняем дату в Oracle как поле даты.Предыдущая Дата получения в тихоокеанском часовом поясе в оракуле

Любое специальное кодирование, требуемое для даты коррекции fecth в Pacific time?

+0

выберите to_date (to_char (systimestamp в часовом поясе '6:00', 'дд.мм.гггг HH24: MI: сс '),' dd.mm.yyyy hh24: mi: ss ') из двойного? –

+0

У меня есть поле start_date в БД. Как я его извлечу, используя выше? – user3151468

+0

вы вставляете временную метку с часовым поясом в поле даты «дата»? если да, то вам нужно изменить часовой пояс, прежде чем вставить вот так: вставить в значения some_table (start_date) (systimestamp в часовом поясе «6:00»); - потому что конвертировать –

ответ

0

Даты не имеют часового пояса - поэтому, когда вы храните даты из разных часовых поясов, вам необходимо убедиться, что вы конвертируете их в один и тот же часовой пояс.

CREATE TABLE table_name(id INT, value DATE); 

INSERT INTO table_name VALUES(1, TIMESTAMP '2016-07-07 23:00:00 PST' AT TIME ZONE 'UTC'); 
INSERT INTO table_name VALUES(1, TIMESTAMP '2016-07-07 23:00:00 EST' AT TIME ZONE 'UTC'); 

Тогда:

SELECT id, 
     value AS utc, 
     CAST(
     FROM_TZ(CAST(value AS TIMESTAMP), 'UTC') AT TIME ZONE 'EST' 
     AS DATE 
     ) AS EST, 
     CAST(
     FROM_TZ(CAST(value AS TIMESTAMP), 'UTC') AT TIME ZONE 'PST' 
     AS DATE 
     ) AS PST 
FROM table_name t; 

Выходы:

ID UTC     EST     PST 
-- ------------------- ------------------- ------------------- 
1 2016-07-08 06:00:00 2016-07-08 01:00:00 2016-07-07 23:00:00 
2 2016-07-08 04:00:00 2016-07-07 23:00:00 2016-07-07 21:00:00 
Смежные вопросы