Por que to_timestamp
usa fusos horários diferentes para exibir épocas, na mesma consulta? Nota +02
vs. +01
_
=> select to_timestamp(1651157248),to_timestamp(1647224832);
to_timestamp | to_timestamp
------------------------+------------------------
2022-04-28 16:47:28+02 | 2022-03-14 03:27:12+01
(1 row)
=> select version();
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit
(1 row)
=> show timezone;
TimeZone
---------------
Europe/Vienna
(1 row)
Pode estar relacionado com a mudança do horário de inverno para o horário de verão no final de março, com +01
correspondente a CET
e +02
a CEST
.
Como faço para usar to_timestamp
de forma consistente o mesmo deslocamento de tempo (não importa qual)?
A Áustria tem horário de verão, então o PostgreSQL exibirá timestamps no inverno com um deslocamento UTC diferente dos timestamps na primavera.
to_timestamp
converte uma época UTC em (independente do fuso horário!)timestamp with time zone
. Somente quando otimestamp with timezone
é renderizado como string, isso é feito de acordo com a configuração atual dotimezone
.Todos os seus carimbos de data/hora são exibidos no mesmo fuso horário:
Europe/Vienna
. Este fuso horário tem diferentes deslocamentos do UTC em diferentes épocas do ano. Se você quiser que todos os carimbos de data e hora sejam exibidos com o mesmo deslocamento UTC, escolha umatimezone
configuração que não tenha horário de verão, por exemploUTC
ou+02
.to_timestamp
exibe uma época de acordo com o fuso horário definido no momento, com um deslocamento apropriado. Se o fuso horário tiver um horário de verão (DST), então o deslocamento escolhido depende se a época cai no intervalo do DST ou não. Para os exemplos abaixo, observe que em2022-03-27 02:00:00+01
, o fuso horárioCET
mudou do horário padrão para o horário de verão.Para obter deslocamentos idênticos, defina o fuso horário para um sem acompanhar o horário de verão:
ou especifique o fuso horário explicitamente sempre que exibir uma época: