Kromě toho musíte uložit posun časového pásma na timestamp
.
Jak již vysvětlil @Milen (a propojen s příručkou
):timestamp
uloží pouze bod v čase (jako abstraktní hodnotu). Modifikátor časového pásma není uložen, slouží pouze k úpravě timestamp
vzhledem k UTC
.
Zvažte následující ukázku:
-- DROP TABLE tbl;
CREATE TEMP TABLE tbl (id int, myts timestamptz, mytz interval);
INSERT INTO tbl VALUES
(1, now() , EXTRACT (timezone from now()) * interval '1s')
,(2, '2012-01-01 00:00-05', interval '-5h')
,(3, '2012-01-01 00:00+04', interval '4h')
,(4, '2012-11-11 20:30+03', interval '3h');
SELECT *
,(myts AT TIME ZONE mytz)::text
|| CASE WHEN mytz > '0:0' THEN '+' ELSE '' END
|| to_char(mytz, 'FMHH24:mi') AS timestamp_at_origin
FROM tbl;
Spusťte jej lokálně a uvidíte. Věnujte zvláštní pozornost podrobnostem V ČASOVÉ ZÓNĚ
konstrukci a jak extrahuji časové pásmo z (místního!) timestamp with time zone
.now()
vrátí timestamp with time zone
nebo timestamptz
ve zkratce.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
zobrazí časové razítko s časovou zónou, jak je vidět v jeho počátku. Pokud jsem pochopil vaši otázku, pak je to, co hledáte.
Mohli byste dále zlepšit formátování.
Mohla by vás zajímat tato související otázka který vrhá trochu světla na nejasnosti a úskalí časových pásem.