Por que há uma diferença entre o fuso horário nomeado e o deslocamento numérico do fuso horário, ambos produzem carimbos de data/hora UTC diferentes para TIMESTAMPTZ
?
Suponha Europe/Prague
fuso horário, que é atualmente +02:00
(DST); tempo de escrita é 2018-08-25
.
Como você pode verificar, por exemplo, via google :
Além disso, na minha instalação do postgres, posso consultá-lo:
SELECT utc_offset FROM pg_timezone_names where name = 'Europe/Prague';
O que também rende 02:00:00
.
Então, por que diabos recebo dois timestamps UTC diferentes ao executar após duas consultas?
Os seguintes rendimentos 2018-08-25T20:00:00.000Z
( 2018-08-25 18:00:00-02
):
SET TIME ZONE '+02:00'; -- with or without the plus
SELECT '2018-08-25 18:00:00'::TIMESTAMPTZ;
O seguinte produz 2018-08-25T16:00:00.000Z
( 2018-08-25 18:00:00+02
), o que está correto:
SET TIME ZONE 'Europe/Prague';
SELECT '2018-08-25 18:00:00'::TIMESTAMPTZ;
Por que o postgres diferencia essas duas notações?
Porque, conforme documentado , um usa POSIX e outro usa ISO-8601.