2011-08-19 5 views
4

저는 PostgreSQL 시간대를 머리 속에 감싸려고하고 있습니다. EST는 미국에서 "동부 표준시"이며 일반적으로 UTC-5입니다.Postgresql에서 "시간대"로 시간대 오프셋을 역전시키는 방법

예 1 : 기본 테스트

select '08/31/2011 12:00 pm EST'::timestamptz at time zone 'EST'; 
     timezone  
--------------------- 
2011-08-31 12:00:00 

예 2 : 오프셋 -5

select '08/31/2011 12:00 pm EST' at time zone '-5'; 
     timezone  
--------------------- 
2011-08-31 22:00:00 

은 분명히 모든 것이 거꾸로 : 오프셋은 5

select '08/31/2011 12:00 pm EST' at time zone '+5'; 
     timezone  
--------------------- 
2011-08-31 12:00:00 

예 3입니다. EST가 다시 ... 입니다. 이제는 문서를 검색해 보았습니다. 그리고 그것은 "POSIX", 즉 which is backwards이라는 것을 설명합니다. (양의 오프셋은 GMT의 서쪽, 음수의 오프셋은 GMT의 동쪽입니다.)

그러나이 문제를 어떻게 해결할 수 있습니까? 응용 프로그램 계층에서 나는 항상 + 기호를 - 기호로 바꿀 수 있지만 IMO에 약간 지저분한 것처럼 보입니다. 따라서 궁극적 인 질문입니다.

데이터베이스 계층 (Postgres)에서 GMT-5가 EST에 해당하도록 "시간대"구문을 사용할 수 있습니까? 아니면 응용 프로그램 계층에서 모든 것을 뒤집어 주어야합니까?

답변

2

를 사용하여 적절한 행동을 얻을 수 documentation에 작성된 간격 데이터 형식 :이 표현에서

, zone이 중 텍스트 문자열을 지정할 수 있습니다 원하는 시간대를 (예를 들어, 'PST') 또는 같은 간격이 (예 : INTERVAL '-08 : 00')입니다.

자료 테스트 :

SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE 'EST'; 
     timezone  
--------------------- 
2011-08-31 12:00:00 
(1 row) 

시간대 정보 : 일반 -5 오프셋

SELECT * FROM pg_timezone_abbrevs WHERE abbrev LIKE 'EST'; 
abbrev | utc_offset | is_dst 
--------+------------+-------- 
EST | -05:00:00 | f 
(1 row) 

:

SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE '-05:00'::interval; 
     timezone  
--------------------- 
2011-08-31 12:00:00 
(1 row) 

은 적절한 +5 오프셋 :

SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE '+05:00'::interval; 
     timezone  
--------------------- 
2011-08-31 22:00:00 
(1 row) 
+0

감사합니다. 어디서나이 기능을 찾을 수 없었습니다. 이 점에 대해 어디에서 배웠는지 알고 있습니까? – Dragontamer5788

+0

@ Dragontamer5788 : 물론, http://postgresql.1045698.n5.nabble.com/Behavior-of-quot-at-time-zone-quot-td1928049.html –

+1

Lol. 그 링크에는 Postgresql 문서에 대한 링크가 있습니다. 오 잘, 나는 방금 매뉴얼의 모두를 읽지 않았다고 생각한다. 링크를 가져 주셔서 감사합니다. 다음 번에 더 자세히 읽으겠습니다. – Dragontamer5788

관련 문제