이 stackoverflow 질문에 대답하고 이상한 결과를 찾았습니다.
select * from pg_timezone_names where name = 'Europe/Berlin' ;
name | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Berlin | CET | 01:00:00 | f
다음 질문
select id,
timestampwithtimezone,
timestampwithtimezone at time zone 'Europe/Berlin' as berlin,
timestampwithtimezone at time zone 'CET' as cet
from data ;
id | timestampwithtimezone | berlin | cet
-----+------------------------+---------------------+---------------------
205 | 2012-10-28 01:30:00+02 | 2012-10-28 01:30:00 | 2012-10-28 00:30:00
204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
203 | 2012-10-28 02:30:00+02 | 2012-10-28 02:30:00 | 2012-10-28 01:30:00
202 | 2012-10-28 02:59:59+02 | 2012-10-28 02:59:59 | 2012-10-28 01:59:59
106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00
PostgreSQL 9.1.2 및 우분투 12.04를 사용하고 있습니다.
8.2.11의 결과가 같은지 확인했습니다.
문서 에 따르면 이름이나 약어를 사용하더라도 중요하지 않습니다.
이것이 버그입니까?
내가 뭔가 잘못하고 있습니까?
누군가이 결과를 설명 할 수 있습니까?
편집 CET이 유럽 / 베를린이 아니라는 의견.
pg_timezone_names에서 값을 선택하고 있습니다.
select * from pg_timezone_names where abbrev ='CEST';
name | abbrev | utc_offset | is_dst
------+--------+------------+--------
과
select * from pg_timezone_names where abbrev ='CET';
name | abbrev | utc_offset | is_dst
---------------------+--------+------------+--------
Africa/Tunis | CET | 01:00:00 | f
Africa/Algiers | CET | 01:00:00 | f
Africa/Ceuta | CET | 01:00:00 | f
CET | CET | 01:00:00 | f
Atlantic/Jan_Mayen | CET | 01:00:00 | f
Arctic/Longyearbyen | CET | 01:00:00 | f
Poland | CET | 01:00:00 | f
.....
겨울철 유럽 / 베를린은 +01입니다. 여름에는 +02입니다.
EDIT2
2012-10-28 시간대는 서머 타임에서 겨울 타임으로 2:00에 변경되었습니다.
이 두 레코드는 유럽 / 베를린에서 동일한 값을 갖습니다.
204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00
106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00
이것은 큰 데이터 범위 (여름 시간과 겨울 시간)에 약어 (CET 또는 CEST) 중 하나를 사용하면 일부 레코드의 결과가 잘못 될 수 있음을 나타냅니다. '유럽 / 베를린'을 사용하면 좋을 것입니다.
시스템 시간을 '2012-01-17'로 변경했으며 pg_timezone_names도 변경되었습니다.
select * from pg_timezone_names where name ='Europe/Berlin';
name | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Berlin | CEST | 02:00:00 | t
CET
것입니다 하지 Europe/Berlin
- 적어도하지 DST 시간 동안.
2012-10-28 01:30:00
CET이 아닌 CEST 임을 확신합니다 .