私はこの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とubuntu 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に変更されました。
この2つのレコードは、ヨーロッパ/ベルリンで同じ値を持ちます。
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
-少なくとも夏時間中はそうではありません。
2012-10-28 01:30:00
CETではなくCESTであると確信しています。