O problema parece não estar relacionado ao Amazon RDS:tem a ver com a convenção usada pelo PostgreSQL. Nesse caso, você faz ter o nome do fuso horário para trás. Você quer dizer
'UTC-01'
onde você escreve 'UTC+01'
Do manual :
Portanto, a string de fuso horário usada para
SET TIME ZONE
(e a exibição de SHOW timezone
, em conformidade) ou o AT TIME ZONE
construção use o sinal oposto do que é exibido em timestamp
(with time zone
) literais! Esse é um desacordo muito infeliz entre o padrão ISO e SQL, por um lado, e o POSIX, por outro. (Acho que o POSIX é o culpado.) Veja:-
Estranhas com AT Compensações de FUSO HORÁRIO e UTC
-
Por que o PostgreSQL interpreta o deslocamento numérico UTC como POSIX e não ISO-8601?
Mas
'CET'
ou 'UTC-01'
ambos ainda estão potencialmente errados para Paris porque eles não estão adotando regras para o horário de verão em conta.(DST é um dos conceitos mais idiotas da história da humanidade.)
Paris (como a maioria da Europa) usa CET durante o inverno e CEST durante o verão. Seus testes com
'CET'
apenas acontecer de trabalhar em novembro. Se você tentar o mesmo no horário de verão, obterá o resultado errado. Para garantir a segurança, sempre use o nome do fuso horário
'Europe/Paris'
, que considera as regras do horário de verão. A ligação é mais cara. A função
current_time
leva em consideração as regras de horário de verão se sua configuração de fuso horário implicar em alguma. Mas 'UTC-01'
é um deslocamento de tempo simples. Eu nunca uso o tipo de dados time with time zone
ou current_time
começar com. O manual mais uma vez:Considerar:
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC+01' AS plus_wrong
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC-01' AS minus_right
SELECT '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'CET' AS cet_winter
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CEST' AS cest_summer
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CET' AS cet_no_dst -- CET wrong!
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_summer
, '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_winter
Relacionado:
-
Ignorando completamente os fusos horários no Rails e PostgreSQL
-
Hora nomes de zona com propriedades idênticas geram resultados diferentes quando aplicados a timestamp
-
Armazenamento de fuso horário no tipo de dados "timestamp com fuso horário"