Du måste spara tidszonsförskjutningen dessutom till timestamp
.
Som @Milen redan förklarat (och länkat till manualen
):en timestamp
sparar bara en tidpunkt (som abstrakt värde). Tidszonsmodifieraren är inte sparas, tjänar den bara till att justera timestamp
i förhållande till UTC
.
Tänk på följande 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 den lokalt för att se. Var särskilt uppmärksam på detaljerna i VID TIDZON
konstruktion, och hur jag extraherar tidszonen från (lokal!) timestamp with time zone
.now()
returnerar timestamp with time zone
eller timestamptz
för kort.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
visar tidsstämpeln med tidszonen som ses vid dess ursprung. Om jag förstod din fråga så är det det du letar efter.
Du kan förbättra formateringen ytterligare.
Du kanske är intresserad av denna relaterade fråga som kastar lite ljus över tidszonernas oklarheter och fallgropar.