私のpostgresql.confファイルでは、私のデフォルトタイムゾーンは 'Europe/London'に設定されています。なぜPostgreSQLが私のDSTを認識しないのですか?
DSTは、10月30日にオフになりますので、これはが今「ヨーロッパ/ロンドンのshould correspond「01」とし(10月4日、私は書いている間)ことを意味します。
私はdummy
テーブルを持っており、time
カラムはtimestamp with timezone
タイプです。 (伝統的にグリニッジ標準時、GMTとして知られている協定世界時)timestamp with timezone
については
は、内部に格納された値がUTCに常にある:
Postgres specs状態。明示的なタイムゾーンが指定された入力値は、そのタイムゾーンの適切なオフセットを使用してUTCに変換されます。 入力文字列にタイムゾーンが指定されていない場合は、システムのTimeZoneパラメータで指定されたタイムゾーンにあるとみなされ、タイムゾーンゾーンのオフセットを使用してUTCに変換されます。太字の文については
、私はこのインサートを作る場合:
INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000')
を私はこのように'2016-12-25 12:00:00.000+01'
、それはヨーロッパ/ロンドンのタイムゾーンとして解釈されることを期待しています。
したがって、私がそれを取得するときに、その値が示されることを期待しています(または、少なくとも同等の値'2016-12-25 11:00:00.000+00'
)。私は、クエリを実行する場合
代わりに、
SELECT * FROM dummy
私はこれを返されています:
|time |
|timestamp with time zone|
--------------------------
|2016-12-25 12:00:00+00 |
私はこの行動の理由を取得することはできません。 「ヨーロッパ/ロンドン」タイムゾーンのDST管理が間違っていますか?何か不足していますか?
他のタイムゾーンに切り替えると、常に期待どおりに機能します。
異なるタイムゾーンを使用しようとしたときに意味がありますか?私は 'SET TIME ZONE'コマンドを使ってセッションレベルでtzを変更しました。 –
@DanieleRepiciあなたの期待が完了していないと、Postgresは 'timestamptz '2016-12-25 12:00:00.000 Europe/London'と仮定します。これは確かに' 2016-12-25 12:00:00 + 00'です。 Postgresは現在の**オフセット**ではなく**タイムゾーン**を使用します)。 – pozs
@pozsだから、基本的には、この場合に正しいオフセットを推測するために現在の時間を考慮していないと言っています。この動作はどこかで指定されていますか?引用されたドキュメントの大胆な文章に関しては、変換を行うために、Postgresはそれ自身に「ok /ヨーロッパ/ロンドンのタイムゾーンのオフセットは何ですか?」と尋ねるべきです。実際の時刻に依存します。 –