PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Especifique um fuso horário para usar como fuso horário de referência


Além disso, você precisa salvar o deslocamento de fuso horário para o timestamp .

Como o @Milen já explicou (e vinculado ao manual ):um timestamp apenas salva um ponto no tempo (como valor abstrato). O modificador de fuso horário não salvo, serve apenas para ajustar o timestamp em relação a UTC .

Considere a seguinte demonstração:
-- 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;

Execute-o localmente para ver. Preste atenção especial aos detalhes do NO FUSO HORÁRIO construção e como extraio o fuso horário do (local!) timestamp with time zone .
now() retorna timestamp with time zone ou timestamptz como diminutivo.
EXTRACT (timezone from now()) * interval '1s'

timestamp_at_origin exibe o carimbo de data/hora com o fuso horário conforme visto em sua origem. Se entendi sua pergunta, então é isso que você está procurando.
Você pode melhorar ainda mais a formatação.

Você pode estar interessado nesta pergunta relacionada que lança alguma luz sobre as ambiguidades e armadilhas dos fusos horários.