Estou fazendo algumas importações de dados que incluem conversão de fuso horário. Os dados que estou importando estão no fuso horário América/Nova_Iorque e preciso importá-los como carimbo de data/hora UTC.
Tentei alguns exemplos que encontrei na internet, como:
to_timestamp(tar.read_at_date || ' ' || tar.read_at_hour, 'MM/DD/YYYY HH24:MI')::timestamp without time zone at time zone 'America/New_York' at time zone 'utc'
e isso pareceu funcionar bem para a maioria dos dados, no entanto, notei algumas conversões estranhas em horários específicos, como se o Postgres estivesse aplicando o horário de verão para o fuso horário UTC (???).
Para ilustrar rapidamente o comportamento, veja os exemplos e resultados abaixo:
select ('2023-03-25 22:00:00'::timestamp at time zone 'America/New_York' at time zone 'utc');
result: 2023-03-26 03:00:00.000
select ('2023-03-25 23:00:00'::timestamp at time zone 'America/New_York' at time zone 'utc');
result: 2023-03-26 03:00:00.000
Estou executando essas consultas em:
PostgreSQL [15.5
PostgreSQL 15.5 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6), 64-bit]
Além disso, para mencionar que em 2023, o horário de verão em Nova York começou no domingo, 12 de março, às 2h. O que é interessante aqui é que no dia 26 de março de 2023, às 2h, é quando os relógios avançam na Europa.
Alguma explicação razoável de por que isso acontece?