適切な 方法は、タイムゾーン付きの時間
を使用しないことです。 ( time
の間のスペースに注意してください およびzone
)設計上壊れているので、まったく。これはSQL標準に含まれているため、Postgresはこのタイプをサポートしていますが、しないことをお勧めします。 それを使用します。この関連する回答の詳細:
DST
で問題が発生しているため 、 timetz
(短い名前)は特に悪い選択です。 DSTに対処するための設備が整っていません。 8:00:00
かどうかを判断することは不可能です 冬または夏の時間です。
タイムスタンプ付きタイムスタンプ
を使用します ( timstamptz
)
代わりは。日付部分はいつでも破棄できます。 start_time ::time
を使用するだけです ローカルを取得するには timestamptz
からの時間 。または、 AT TIME ZONE
>
タイムゾーンに移調します。
通常、DSTを自動的に考慮に入れる 、タイムゾーン名を使用します タイムゾーンの省略形の代わりに。この関連する質問と回答の詳細:
特定のケースでは、おそらく America / Los_Angeles
を使用できます。 ( timestamptz
の例 ):
INSERT INTO mytable(start_time, end_time)
VALUES
('1970-01-01 08:00:00 America/Los_Angeles'
, '1970-01-01 18:00:00 America/Los_Angeles')
私はこれをチェックして見つけました:
SELECT * FROM pg_timezone_names
WHERE utc_offset = '-07:00'
AND is_dst;
タイムゾーン処理の基本: