Du skal desuden gemme tidszoneforskydningen til timestamp
.
Som @Milen allerede har forklaret (og linket til manualen
):et timestamp
gemmer kun et tidspunkt (som abstrakt værdi). Tidszonemodifikatoren er ikke gemt, tjener det kun til at justere timestamp
i forhold til UTC
.
Overvej følgende demo:
-- 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;
Kør det lokalt for at se. Vær særlig opmærksom på detaljerne i PÅ TIDSZONE
konstruktion, og hvordan jeg udtrækker tidszonen fra (lokalt!) timestamp with time zone
.now()
returnerer timestamp with time zone
eller timestamptz
for kort.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
viser tidsstemplet med tidszonen som set ved dens oprindelse. Hvis jeg forstod dit spørgsmål, så er det det, du leder efter.
Du kan forbedre formateringen yderligere.
Du kan være interesseret i dette relaterede spørgsmål som kaster lidt lys over tidszonernes tvetydigheder og faldgruber.