PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie man eine Zeitzone eines Zeitstempels in postgresql 8.3 erkennt

Ich nehme an, Sie haben eine Spalte namens ct die den Typ TIMESTAMPTZ hat in der Tabelle t . Dann können Sie verwenden:

SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

um den Offset der Zeitzone in Sekunden zu erhalten. Das ergibt 3600 von UTC /GMT das bedeutet entweder GMT+1 , CET oder Wasauchimmer. Der zurückgegebene Wert hängt von Ihrer TIMEZONE ab Einstellung.

Beispiel (Ich lebe in Deutschland, aktuelle Zeitzone ist GMT+1 /CET ):

test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 18:00:00+01

test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 17:00:00+00

Wie Sie sehen können, gibt es immer alles in der konfigurierten Zeitzone aus. Den Offset erhalten Sie also mit EXTRACT(TIMEZONE FROM ...) hängt von Ihrer TIMEZONE ab Einstellung. Die Zeitzone, die bei INSERT angegeben wurde ist verloren, weil es nicht wert ist, gerettet zu werden. Wichtig ist, dass alles stimmt und das sollte nicht von der TIMEZONE abhängen Einstellung. PostgreSQL macht das sehr gut.