適切な 方法は、タイムゾーン付きの時間を使用しないことです。 ( 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;
タイムゾーン処理の基本: