2014-10-29 4 views
0

UTC 날짜/시간을 로컬 CST로 변환하고 싶습니다.Oracle SQL : UTC에서 CST로 변환

아래의 기능은 작동하지만 5 시간 (2014 년 11 월 2 일의 절전까지 하루 소요) 인 경우 6 시간 차이가납니다.

CAST((FROM_TZ(CAST(utc_date AS TIMESTAMP),'UTC') AT TIME ZONE 'CST') AS DATE) cst_date 

또한 변화를

to_date(to_char((from_tz(to_timestamp(to_char(utc_date, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') ,'UTC') 
at time zone 'CST'),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as cst_date, 
+0

'utc_date'열의 데이터 유형은 무엇입니까? –

+0

@Wernfried 데이터 유형은 DATE입니다. FROM_TZ를 사용하려면 시간 소인이 필요합니다. http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions059.htm. Rajesh Chamarthi와의 나의 마지막 코멘트를 아래에서보십시오. – user3050672

답변

0

사용 시간대 지역 대신 시간대 약식 ('CST')를 시도했다. 당신은 여기에 원하는 시간대를 찾을 수 있습니다 :

SELECT * from v$timezone_names where tzabbrev = 'CST'; 

은 어쩌면 당신은 목표 시간대가 올바른 결과를 생성하는 것 같이 "(미국/중부 표준시)"를 사용하는 대신 'CST'

+0

좋은 지적. 나는이 지역이 tzabbrev = 'CST'하에 다른 지역을 보았을 때이 문제를 해결할 것이라는 희망을 가지고있었습니다. 그러나 'America/Chicago'와 같은 하위 지역을 사용할 경우 동일한 결과가 발생합니다. – user3050672

1

의 'CST6CDT'을해야합니다.

select from_tz(CAST ('15-oct-2014' AS TIMESTAMP),'GMT') at TIME ZONE 'US/Central' with_daylight_savings, 
     from_tz(CAST ('15-nov-2014' AS TIMESTAMP),'GMT') at TIME ZONE 'US/Central' without_daylight_savings 
from dual; 


WITH_DAYLIGHT_SAVINGS      WITHOUT_DAYLIGHT_SAVINGS 
-------------------------------------------------------------------------------------- 
14-OCT-14 07.00.00.000000000 PM US/CENTRAL 14-NOV-14 06.00.00.000000000 PM US/CENTRAL 
+0

이렇게하면 예상대로 5 시간 차이가납니다. – user3050672

+0

SELECT TO_DATE ('2013-10-29 18:00:00', 'YYYY-MM-DD HH24 : MI : SS'), NEW_TIME (TO_DATE ('2013-10-29 18:00:00', ' YYYY-MM-DD HH24 : MI : SS '), 'GMT ', 'CDT ') FROM DUAL; – user3050672

+0

여기에서 나는 하루 6 시간 후에 광 절약 시간 조정을 기대하고 있습니다. – user3050672

0

어쩌면 어리석은 방법 일 수도 있지만이 쿼리에서 무엇을 얻을 수 있습니까?

SELECT 
    TO_CHAR((TIMESTAMP '2014-01-01 00:00:00' + LEVEL * INTERVAL '1' DAY) AT TIME ZONE 'America/Chicago', 'yyyy-mm-dd hh24:mi TZH:TZM') AS dst, 
    TO_CHAR((FROM_TZ(CAST(DATE '2014-01-01' AS TIMESTAMP), 'UTC') + LEVEL * INTERVAL '1' DAY) AT TIME ZONE 'America/Chicago', 'yyyy-mm-dd hh24:mi TZH:TZM') AS dst 
FROM dual 
CONNECT BY LEVEL <= 365; 

예상대로입니까?

관련 문제