Tienes que guardar el desplazamiento de la zona horaria además a la timestamp
.
Como ya explicó @Milen (y vinculado al manual
):una timestamp
solo guarda un punto en el tiempo (como valor abstracto). El modificador de zona horaria es no guardado, solo sirve para ajustar el timestamp
relativo a UTC
.
Considere la siguiente demostración:
-- 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;
Ejecútelo localmente para ver. Preste especial atención a los detalles de EN LA ZONA HORARIA
construir, y cómo extraigo la zona horaria de la (¡local!) timestamp with time zone
.now()
devuelve timestamp with time zone
o timestamptz
para abreviar.
EXTRACT (timezone from now()) * interval '1s'
timestamp_at_origin
muestra la marca de tiempo con la zona horaria como se ve en su origen. Si entendí su pregunta, entonces eso es lo que está buscando.
Podría mejorar aún más el formato.
Puede que le interese esta pregunta relacionada lo que arroja algo de luz sobre las ambigüedades y peligros de las zonas horarias.