Предполагам, че имате колона с име ct
който има тип TIMESTAMPTZ
в таблицата t
. След това можете да използвате:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
за да получите отместването на часовата зона в секунди. Това ви дава 3600
от UTC
/GMT
това означава или GMT+1
, CET
или каквото и да е. Върнатата стойност зависи от вашата TIMEZONE
настройка.
Пример (живея в Германия, действителната часова зона е 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
Както можете да видите, той винаги извежда всичко в конфигурираната часова зона. Така че отместването, което ще получите с EXTRACT(TIMEZONE FROM ...)
зависи от вашата TIMEZONE
настройка. Часовата зона, дадена на INSERT
е загубен, защото не си струва да бъде спасен. Важното е всичко да е правилно и това не трябва да зависи от TIMEZONE
настройка. PostgreSQL прави това много добре.