Il problema sembra non correlato ad Amazon RDS:ha a che fare con la convenzione utilizzata da PostgreSQL. In questo caso, lo fai avere il nome del fuso orario indietro. Intendi 'UTC-01'
dove scrivi .'UTC+01'
Da il manuale :
Quindi stringa di fuso orario utilizzata per SET TIME ZONE
(e la visualizzazione di SHOW timezone
, di conseguenza) o il AT TIME ZONE
costruire usa il segno opposto di ciò che viene visualizzato in timestamp
(with time zone
) letterali! Questo è uno sfortunato disaccordo tra lo standard ISO e SQL da un lato e POSIX dall'altro. (Penso che la colpa sia di POSIX.) Vedi:
Ma 'CET'
o 'UTC-01'
sono entrambi ancora potenzialmente sbagliati per Parigi perché non stanno adottando le regole per l'ora legale in considerazione.
(L'ora legale è uno dei concetti più idioti nella storia dell'umanità.)
Parigi (come la maggior parte dell'Europa) utilizza il CET durante l'inverno e il CEST durante l'estate. I tuoi test con 'CET'
capita di lavorare a novembre. Se provi lo stesso in estate, ottieni il risultato sbagliato.
Per sicurezza, usa sempre il nome del fuso orario 'Europe/Paris'
, che considera le regole dell'ora legale. La chiamata è più costosa.
La funzione current_time
tiene conto delle regole dell'ora legale se l'impostazione del fuso orario lo implica. Ma 'UTC-01'
è un semplice sfasamento temporale. Non utilizzo mai il tipo di dati time with time zone
o current_time
iniziare con. Il manuale ancora una volta:
Considera:
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
Correlati: