Předpokládám, že máte sloupec s názvem ct
který má typ TIMESTAMPTZ
v tabulce t
. Pak můžete použít:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
získat posun časového pásma v sekundách. To vám dává 3600
z UTC
/GMT
to znamená buď GMT+1
, CET
nebo cokoli jiného. Vrácená hodnota závisí na vašem TIMEZONE
nastavení.
Ukázka (žiji v Německu, aktuální časové pásmo je 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 můžete vidět, vždy vypíše cokoliv v nakonfigurovaném časovém pásmu. Takže offset získáte pomocí EXTRACT(TIMEZONE FROM ...)
závisí na vašem TIMEZONE
nastavení. Časové pásmo zadané v INSERT
je ztracen, protože nestojí za to být spasen. Důležité je, že je vše v pořádku a nemělo by to záviset na TIMEZONE
nastavení. PostgreSQL to umí velmi dobře.