これを投稿した直後に、疑惑を確認するために別のクエリを実行しました:
SELECT * FROM pg_timezone_abbrevs
WHERE abbrev IN ('CEST', 'CET');
abbrev | utc_offset | is_dst
--------+------------+--------
CEST | 02:00:00 | t
CET | 01:00:00 | f
結局のところ、もあります タイムゾーンの略語 名前付きCET
(これは理にかなっています。「CET」は略語です)。そして、PostgreSQLはフルネームよりも略語を選んでいるようです。だから、CET
を見つけたのに タイムゾーンの名前 、式 '2012-01-18 1:0 CET' ::timestamptzは、タイムゾーンの省略形の微妙に異なる規則に従って解釈されます。 。
SELECT '2012-01-18 1:0 CEST'::timestamptz(0)
,'2012-01-18 1:0 CET'::timestamptz(0)
,'2012-01-18 1:0 Europe/Vienna'::timestamptz(0);
timestamptz | timestamptz | timestamptz
------------------------+------------------------+------------------------
2012-01-18 00:00:00+01 | 2012-01-18 01:00:00+01 | 2012-01-18 01:00:00+01
SELECT '2012-08-18 1:0 CEST'::timestamptz(0)
,'2012-08-18 1:0 CET'::timestamptz(0)
,'2012-08-18 1:0 Europe/Vienna'::timestamptz(0);
timestamptz | timestamptz | timestamptz
------------------------+------------------------+------------------------
2012-08-18 01:00:00+02 | 2012-08-18 02:00:00+02 | 2012-08-18 01:00:00+02
タイムゾーンの略語が10件見つかりました タイムゾーンの名前 そして、なぜそれらがそこにあるのか理解できません。目的は何ですか?
その中で、時間オフセット(utc_offset
)DST設定が原因で、4つのケースで一致しません:
SELECT n.*, a.*
FROM pg_timezone_names n
JOIN pg_timezone_abbrevs a ON a.abbrev = n.name
WHERE n.utc_offset <> a.utc_offset;
name | abbrev | utc_offset | is_dst | abbrev | utc_offset | is_dst
------+--------+------------+--------+--------+------------+--------
CET | CEST | 02:00:00 | t | CET | 01:00:00 | f
EET | EEST | 03:00:00 | t | EET | 02:00:00 | f
MET | MEST | 02:00:00 | t | MET | 01:00:00 | f
WET | WEST | 01:00:00 | t | WET | 00:00:00 | f
このような場合、人々は(私がそうであったように)だまされて、tz nameを調べます。 実際に適用されていない時間オフセットを見つけます。これは残念な設計です。バグではないにしても、少なくともドキュメントのバグ 。
タイムゾーンの名前間のあいまいさについて、マニュアルで何も見つかりません。 および略語 解決されます。明らかに略語が優先されます。
付録B.1。日付/時刻入力の解釈では、タイムゾーンの略語の検索について言及していますが、不明のままです。 タイムゾーンの名前 トークンがあいまいな場合に識別され、どちらが優先されます。
トークンがテキスト文字列の場合は、可能な文字列と一致させます。
タイムゾーンの省略形としてトークンのバイナリ検索テーブルルックアップを実行します。
さて、この文には略語が最初に来るというわずかなヒントがありますが、決定的なものは何もありません。また、abbrev
列があります 両方のテーブルで、pg_timezone_names
およびpg_timezone_abbrevs
...