Jeg går ud fra, at du har en kolonne ved navn ct
som har typen TIMESTAMPTZ
i tabellen t
. Så kan du bruge:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
for at få forskydningen af tidszonen i sekunder. Det, der giver dig 3600
fra UTC
/GMT
det betyder enten GMT+1
, CET
eller hvad som helst. Den returnerede værdi afhænger af din TIMEZONE
indstilling.
Eksempel (jeg bor i Tyskland, den faktiske tidszone er 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
Som du kan se, udsender den altid hvad som helst i den konfigurerede tidszone. Så den offset du får med EXTRACT(TIMEZONE FROM ...)
afhænger af din TIMEZONE
indstilling. Tidszonen, som blev givet på INSERT
er tabt, fordi det ikke er værd at blive frelst. Det der tæller er, at alt er korrekt, og det bør ikke afhænge af TIMEZONE
indstilling. PostgreSQL gør det meget godt.