sql >> Base de Datos >  >> RDS >> PostgreSQL

Especifique una zona horaria para usar como zona horaria de referencia

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.