Bu stackoverflow soruya cevap ve garip sonuç bulundu:
select * from pg_timezone_names where name = 'Europe/Berlin' ;
name | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Berlin | CET | 01:00:00 | f
ve sonraki sorgu
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 ve Ubuntu 12.04 kullanıyorum.
Sadece 8.2.11 sonucunun aynı olduğunu kontrol ettim.
Belgelere göre, isim veya kısaltma kullanmam önemli değil.
Bu bir hata mı?
Yanlış bir şey mi yapıyorum?
Birisi bu sonucu açıklayabilir mi?
EDIT CET'in Avrupa / Berlin olmadığı yorumu için.
Ben sadece pg_timezone_names değerleri seçiyorum.
select * from pg_timezone_names where abbrev ='CEST';
name | abbrev | utc_offset | is_dst
------+--------+------------+--------
ve
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
.....
Kışın Avrupa / Berlin +01'dir. Yaz aylarında +02'dir.
EDIT2
2012-10-28'de saat dilimi yaz saatinden kış saatine 2: 00'da değişmiştir.
Bu iki kayıt Avrupa / Berlin'de aynı değere sahiptir:
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
Bu, büyük veri aralığı (yaz saati ve kış saati) için kısaltmalardan birini (CET veya CEST) kullanırsam sonuçların bazı kayıtlar için yanlış olacağını gösterir. 'Avrupa / Berlin' kullanırsam iyi olur.
Sistem saatini '2012-01-17' olarak değiştirdim ve pg_timezone_names de değişti.
select * from pg_timezone_names where name ='Europe/Berlin';
name | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Berlin | CEST | 02:00:00 | t
CET
olduğunu değil Europe/Berlin
- en azından değil DST zamanlarda.
2012-10-28 01:30:00
CET değil, CEST olduğundan emin .