2016-10-04 9 views
0

私の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管理が間違っていますか?何か不足していますか?

他のタイムゾーンに切り替えると、常に期待どおりに機能します。

+0

異なるタイムゾーンを使用しようとしたときに意味がありますか?私は 'SET TIME ZONE'コマンドを使ってセッションレベルでtzを変更しました。 –

+0

@DanieleRepiciあなたの期待が完了していないと、Postgresは 'timestamptz '2016-12-25 12:00:00.000 Europe/London'と仮定します。これは確かに' 2016-12-25 12:00:00 + 00'です。 Postgresは現在の**オフセット**ではなく**タイムゾーン**を使用します)。 – pozs

+0

@pozsだから、基本的には、この場合に正しいオフセットを推測するために現在の時間を考慮していないと言っています。この動作はどこかで指定されていますか?引用されたドキュメントの大胆な文章に関しては、変換を行うために、Postgresはそれ自身に「ok /ヨーロッパ/ロンドンのタイムゾーンのオフセットは何ですか?」と尋ねるべきです。実際の時刻に依存します。 –

答えて

1

入力したタイムスタンプは、Europe/Londonタイムゾーンで解釈されるです。

12月25日、ロンドンはUTCから0時間オフセットされるため、正午は12:00 UTCになります。

タイムゾーンEurope/London時間帯+01、少なくともではない、すべての時間と同じではありません。

+0

私はちょうど昨日からこれに固執しています、ありがとう。それはとても些細なことでした:( –

関連する問題