2016-10-04 5 views
0

In meiner postgresql.conf Datei ist meine Standardzeitzone auf "Europa/London" eingestellt.Warum erkennt Postgres meine Sommerzeit nicht?

Da der DST wird am 30. Oktober abgeschaltet werden, bedeutet dies, dass jetzt (4. Oktober während ich schreibe) ‚Europa/London‘ should correspond mit ‚+01‘.

Ich habe eine dummy Tabelle mit einer time Spalte von timestamp with timezone Typ.

Postgres specs Zustand, der:

Für timestamp with timezone, die intern gespeicherte Wert ist immer in UTC (Universal Coordinated Time, bekannt traditionell als Greenwich Mean Time, GMT). Ein Eingabewert, für den eine explizite Zeitzone angegeben wurde, wird mit dem entsprechenden Offset für diese Zeitzone in UTC konvertiert. Wenn in der Eingabezeichenfolge keine Zeitzone angegeben ist, wird davon ausgegangen, dass sie sich in der vom TimeZone-Parameter des Systems angegebenen Zeitzone befindet und mithilfe des Offsets für die Zeitzonenzone in UTC konvertiert wird.

Was den fett Satz, wenn ich diesen Einsatz machen:

INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000') 

Ich erwarte, dass es als ein ‚Europa/London‘ Zeitzone interpretiert werden, so '2016-12-25 12:00:00.000+01'.

Daher, wenn ich es abrufen werde, erwarte ich, dass dieser Wert angezeigt wird (oder zumindest das Äquivalent '2016-12-25 11:00:00.000+00').

Stattdessen, wenn ich die Abfrage tun

SELECT * FROM dummy 

Ich bin diese zurückgegeben:

|time     | 
|timestamp with time zone| 
-------------------------- 
|2016-12-25 12:00:00+00 | 

Ich kann den Grund für dieses Verhalten bekommen. Ist die DST-Verwaltung der Zeitzone "Europa/London" falsch? Fehle ich etwas?

Wenn ich zu einer anderen Zeitzone umschalte, funktioniert es immer wie erwartet.

+0

Meinst du wenn ich verschiedene Zeitzonen verwenden wollte? Ich habe gerade den tz auf Sitzungsebene geändert, indem ich den Befehl SET TIME ZONE verwendet habe. –

+0

@DanieleRepici Ihre Erwartung ist nicht vollständig, Postgres wird annehmen "Zeitstempel" 2016-12-25 12: 00: 00.000 Europe/London'', das ist tatsächlich "2016-12-25 12: 00: 00 + 00" (dh Postgres verwendet die ** Zeitzone **, nicht die aktuelle ** Verschiebung **). – pozs

+0

@pozs also im Grunde sagst du, dass es in diesem Fall die aktuelle Zeit nicht berücksichtigt, um auf den korrekten Offset zu schließen. Ist dieses Verhalten irgendwo angegeben?Was den fettgedruckten Satz in der zitierten Dokumentation angeht, sollte Postgres sich fragen, um die Konvertierung vorzunehmen: "ok, was ist der Offset für die Zeitzone 'Europa/London'?" und es hängt tatsächlich von der aktuellen Zeit ab. –

Antwort

1

Der von Ihnen eingegebene Zeitstempel wird in der Zeitzone Europe/London interpretiert.

Am 25. Dezember wird London 0 Stunden vor UTC verrechnet, also um 12:00 UTC.

Zeitzone Europe/London ist nicht die gleiche wie die Zeitzone +01, zumindest nicht die ganze Zeit.

+0

Ich bin gerade seit gestern in diesem stecken geblieben, danke. Es war so trivial :( –

Verwandte Themen