2017-12-19 16 views
0

데이터 형식이 timestamp with time zone 인 PostgreSQL 테이블에 타임 스탬프가 저장되어 있습니다. 나는 그들이 실제로 UTC와 함께 저장되었다는 것을 이해하지만, 데이터베이스는 US Central (CST/CDT)로 설정되어있다. 모든 기록은 원래 미국 중부 타임 스탬프가 아니 었습니다 - 일부 다른 미국 시간대에서. 쿼리 할 때 도시를 기반으로 올바른 원래 표준 시간대를 식별하고 타임 스탬프를 원본 시간대로 다시 변환하려고합니다. 이 부분은 수동으로 만든 조회 테이블 집합으로 해결됩니다. 표준 대에 시간대의 일광 버전을 변환 할 때가 붙어있어 무엇PostgreSQL Convert timestamptz

은 알고있다. 미국의 경우 Standard -> Daylight on 3 월 2 일 일요일 02시 (즉시 0300). 11 월의 일요일 일요일에 Daylight -> Standard at 0200으로 즉시 0100이됩니다. 첫 번째 전환은 쉽습니다 (date > spring_forward & hour > 2).

그러나 그날 0100에 대해 본질적으로 2 개의 레코드가 있으므로 두 번째 전환은 어렵습니다. CDT의 경우 0100, CST의 경우 0100입니다. 분명히, 복제 된 0100 Standard로 변환하고 싶지만 첫 번째는 아니지만 몇 가지 복잡한 계산 쿼리없이이를 수행하는 방법을 잘 모르겠습니다. 이 문제는 PST & PDT를 모두 포함하는 "태평양"과 같은 "일반적인"시간대로 파이썬에서 해결 된 것으로 보입니다. 그래도 PostgreSQL의 경우에는 아무 것도 보이지 않습니다. https://www.postgresql.org/docs/7.2/static/timezones.html.

원래 도시를 알고있는 타임 스탬프의 경우 표준 시간대를 일광 절약 시간제 표준 시간대로 변환하는 방법은 무엇입니까?

+0

나는 'time zone'에서 시간대 '* zone name from look up table *'을 고수 할 것입니다 ... –

답변

0

당신은 일광 절약 시간에 대해 걱정할 필요가 없습니다. PostgreSQL은 모든 영리를 가지고 있습니다. AT TIME ZONE 구문을 사용하십시오.

시카고 시간에 timestamp with time zone을 변환하려면

SELECT '2017-12-03 00:00:00 UTC' AT TIME ZONE 'America/Chicago'; 

     timezone  
--------------------- 
2017-12-02 18:00:00 
(1 row) 

결과가 timestamp without time zone이다. 보시다시피 타임 스탬프가 일광 절약 시간으로 올바르게 변환되었습니다.

카탈로그보기 pg_timezone_names에서 지원되는 표준 시간대 목록을 찾을 수 있습니다.

+0

'America/Chicago'가 문서로 시간에 나열되어 있지 않아도 작동하는 것을 볼 수 있습니다. 존. 이 (및 다른) 이름이 문서화 된 곳으로 안내해 주시겠습니까? –

+0

답변에 추가했습니다. –