Zakładam, że masz kolumnę o nazwie ct
który ma typ TIMESTAMPTZ
w tabeli t
. Następnie możesz użyć:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
aby uzyskać przesunięcie strefy czasowej w sekundach. To daje ci 3600
z UTC
/GMT
oznacza to albo GMT+1
, CET
lub cokolwiek. Zwrócona wartość zależy od Twojego TIMEZONE
ustawienie.
Przykład (mieszkam w Niemczech, rzeczywista strefa czasowa to 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
Jak widać, zawsze wyświetla wszystko w skonfigurowanej strefie czasowej. Tak więc przesunięcie, które otrzymasz za pomocą EXTRACT(TIMEZONE FROM ...)
zależy od Twojej TIMEZONE
ustawienie. Strefa czasowa podana w INSERT
jest stracone, bo nie warto być zbawionym. Liczy się to, że wszystko jest w porządku i nie powinno to zależeć od TIMEZONE
ustawienie. PostgreSQL robi to bardzo dobrze.