2013-03-29 1 views
1

hsqldb에서 TIMESTAMP() 함수는 추가 변환 전에 세션의 시간대로 조정 된 WITHOUT TIME ZONE 타임 스탬프를 반환합니다.hsqldb의 유닉스 타임 스탬프에서 올바르게 옮겨 놓은 UTC 타임 스탬프를 얻는 방법

그럼 내 세션이 UTC + 1이고 다른 곳에서 오는 유닉스 타임 스탬프가 1364353339 (Wed, 27 Mar 2013 03:02:19 GMT, http://www.onlineconversion.com/unix_time.htm에 따라)라고 가정 해 보겠습니다. 내가 전화하면 :

VALUES(TIMESTAMP(1364353339) AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE); 

이것은 2013-03-27 02:02:19.000000+0:00입니다. 이것은 정확한 tz를 가지고 있지만 실제 값은 1 시간 미만이어야합니다.

다른 가능성 나는

VALUES(TIMESTAMP(1364353339) AT LOCAL) --> 2013-03-27 03:02:19.000000+1:00 
Value right, TZ wrong 

VALUES CAST(TIMESTAMP(1364353339) AT TIME ZONE INTERVAL '0:00' HOUR TO MINUTE AS TIMESTAMP(0) WITH TIME ZONE); --> 2013-03-27 02:02:19+0:00 
Value wrong, TZ right 

VALUES CAST(TIMESTAMP(1364353339) AT LOCAL AS TIMESTAMP(0) WITH TIME ZONE) --> 2013-03-27 03:02:19+1:00 
Value right, TZ wrong 

세션의 시간대가 이전에 (SET TIME ZONE INTERVAL '0:00' HOUR TO MINUTE으로 예를 들어) UTC로 전환되면 모든 이들의 올바른 값 (중 2013-03-27 03:02:19+0:00 또는 2013-03-27 04:02:19+1:00)을 반환

을 탐구했습니다.

이것은 뷰 필드에 대해 계산되므로 수행 할 수 없습니다. 실제 시간 소인은 텍스트 테이블의 필드에서옵니다.

답변

0

이것은 아마도 모든 시간대에 작동합니다

VALUES TIMESTAMP(1364353339) + SESSION_TIMEZONE() 

이 형태도 가능하다 :

VALUES TIMESTAMP(1364353339) + DATABASE_TIMEZONE() 
VALUES TIMESTAMP(1364353339) + TIMEZONE() 

DATABASE_TIMEZONE을() 클라이언트 - 서버 설정에서 세션 다를 수 있습니다. SET TIME ZONE을 사용하는 경우 TIMEZONE()은 SESSION_TIMEZONE()과 다를 수 있습니다.

관련 문제