2016-10-04 8 views
0

postgresql.conf 파일에서 내 기본 시간대는 '유럽/런던'으로 설정됩니다. DST를가 월 30 일 10 월 꺼집니다 때문에 왜 Postgres는 내 DST를 인식하지 못합니까?

,이 의미 지금 (10월 4일 내가 쓰고있는 동안) '유럽/런던' should correspond '01'과 함께.

나는열이 timestamp with timezone 유형 인 테이블을 가지고 있습니다. (전통적으로 그리니치 표준시, GMT로 알려진 표준시) timestamp with timezone를 들어

는, 내부적으로 저장된 값은 UTC 항상 :

Postgres specs 상태입니다. 명시 적 시간대가 지정된 입력 값은 해당 시간대의 해당 오프셋을 사용하여 UTC로 변환됩니다. 입력 문자열에 시간대가 없다면 시스템의 TimeZone 매개 변수에 지정된 시간대로 간주되며 시간대 영역의 오프셋을 사용하여 UTC로 변환됩니다. 나는이 삽입 할 경우 굵은 문장으로

는 :

INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000') 

을 나는 이렇게 '2016-12-25 12:00:00.000+01'하는 '유럽/런던 시간대로 해석 될 전망이다.

따라서 검색 할 때 해당 값이 표시 될 것으로 예상됩니다 (또는 최소한 '2016-12-25 11:00:00.000+00'). 내가 쿼리를 할 경우

대신

SELECT * FROM dummy 

나는이 반환 오전 :

|time     | 
|timestamp with time zone| 
-------------------------- 
|2016-12-25 12:00:00+00 | 

나는이 행동의 이유를 얻을 수 없습니다. '유럽/런던'시간대의 DST 관리가 잘못 되었습니까? 내가 놓친 게 있니?

다른 표준 시간대로 전환하면 항상 예상대로 작동합니다.

+0

다른 시간대를 사용하려고 했습니까? 방금 SET TIME ZONE 명령을 사용하여 세션 레벨에서 tz를 변경했습니다. –

+0

@DanieleRepici 기대가 완전하지 않다. Postgres는 'timestamptz'2016-12-25 12 : 00 : 00.000 Europe/London '을 '2016-12-25 12 : 00 : 00 + 00' (ie Postgres는 현재 ** 오프셋 **이 아닌 ** 시간대 **를 사용합니다. – pozs

+0

@pozs 그래서 기본적으로이 경우 올바른 오프셋을 추론 할 현재 시간을 고려하지 않는다고 말하고 있습니다. 이 동작이 어딘가에 지정되어 있습니까?따옴표로 묶인 문서에서 대담한 문장에 관해서는, 변환을하기 위해, Postgres는 "ok, 유럽/런던의 표준 시간대에 대한 오프셋은 무엇입니까?"라고 물어야합니다. 실제로 현재 시간에 달려 있습니다. –

답변

1

입력하는 타임 스탬프 Europe/London 시간대로 해석되는입니다.

12 월 25 일에 런던은 UTC에서 0 시간 오프셋되기 때문에 정오는 12:00 UTC에있게됩니다.

시간대 Europe/London 적어도 모든 타임 시간대 +01 같은 하지이다.

+0

어제부터 막 들어 봤습니다. 고마워요. 그렇게 사소한 일이었다. ( –

관련 문제