Jag antar att du har en kolumn som heter ct
som har typen TIMESTAMPTZ
i tabellen t
. Då kan du använda:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
för att få tidszonens förskjutning i sekunder. Det som ger dig 3600
från UTC
/GMT
det betyder antingen GMT+1
, CET
eller vad som helst. Värdet som returneras beror på din TIMEZONE
inställning.
Exempel (jag bor i Tyskland, faktisk tidszon är 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 matar den alltid ut vad som helst i den konfigurerade tidszonen. Så offset du får med EXTRACT(TIMEZONE FROM ...)
beror på din TIMEZONE
miljö. Tidszonen som gavs på INSERT
är förlorad, eftersom det inte är värt att bli frälst. Det som räknas är att allt är korrekt och det bör inte bero på TIMEZONE
miljö. PostgreSQL gör det mycket bra.