는 to_timestamp_tz()
을 사용하지만 실제로는 아마도 UTC 아닌 시스템의 시간대로 변환 디폴트의 시간대를 지정하지 마십시오. 그러므로 생성하는 시간대가있는 타임 스탬프는 이미 로컬 시스템 시간대에 있으므로 at local
은 아무 것도하지 않습니다.
대신 일반 타임 스탬프로 변환하고, the from_tz()
function와 UTC로 시간대를 선언 할 수 있습니다; 다음 여전히 현지 시간대로 변경 the AT LOCAL
expression를 사용
alter session set time_zone = 'Europe/Vienna';
SELECT CAST(
FROM_TZ(TO_TIMESTAMP('2016-11-29T23:00:00.000Z', 'FXYYYY-MM-DD"T"HH24:MI:SS.FXFF3"Z"'),
'UTC') AT LOCAL AS DATE) FROM DUAL;
CAST(FROM_TZ(TO_TIM
-------------------
2016-11-30 00:00:00
조금 그 아래로 속보 :
TO_TIMESTAMP('2016-11-29T23:00:00.000Z', 'FXYYYY-MM-DD"T"HH24:MI:SS.FXFF3"Z"')
없이 시간대 정보와 함께, 일반 TIMESTAMP
값에 문자열 값을 변환.
FROM_TZ(..., 'UTC')
은 해당 시간대를 UTC로 사용하여 time stamp with time zone
으로 timestamp
을 변환합니다. 날짜/시간 요소를 조정하지 않으면 UTC 값을 나타냅니다.
... AT LOCAL
는 (당신의 시스템 타임 존과 동일하지 않을 수 있음) 세션의 시간대로 변환합니다.
CAST(... AS DATE)
는
date
에 현지 시간대의 값을 변환; 다시 요소 값을 조정하지는 않지만 소수 초 및 표준 시간대 정보는 손실됩니다.
는 또한 to_timestamp_tz()
을 고수하지만 UTC 코드를 포함 할 수 있습니다 :
SELECT CAST(
TO_TIMESTAMP_TZ('2016-11-29T23:00:00.000Z' || 'UTC',
'FXYYYY-MM-DD"T"HH24:MI:SS.FXFF3"Z"TZR')
AT LOCAL AS DATE) FROM DUAL;
또는 UTC와 Z를 대체 :
이 모든 가정
SELECT CAST(
TO_TIMESTAMP_TZ(REPLACE('2016-11-29T23:00:00.000Z', 'Z', 'UTC'),
'FXYYYY-MM-DD"T"HH24:MI:SS.FXFF3TZR')
AT LOCAL AS DATE) FROM DUAL;
- 올바르게, 내가 생각 - 그 json으로 문자열은 항상 UTC되고 Z가되도록하고 (물론, as it should do) 것을 의미하는 것으로 가정 할 수있다.
Z (일명 "줄루 시간")은 [이 질문에 대한 답변]에 따라 UTC를 나타냅니다 (http://stackoverflow.com/questions/9706688/what-does-the-z-mean-in-unix- timestamp-120314170138z). 나는 타임 존과 관련된 질문에서 마지막으로 얽힌 시간을 보았습니다. 그것은 나를위한 "oooooohhhh"순간이었다! * {:-) – Boneist
네,하지만 실제로는 UTC가 아닌 값을 자동으로 추가하는 것으로 나타났습니다. 그건 여기에 문제가되는 것 같지 않고 단지 자신을 덮고있는 것 같습니다 ... –
그 악마가 될 것입니다!매우 잘 알려진 일이 아닐 것 같습니다. – Boneist