Problemet verkar inte ha något samband med Amazon RDS:det har att göra med konventionen som används av PostgreSQL. I det här fallet gör du har tidszonsnamnet bakåt. Du menar 'UTC-01'
där du skriver .'UTC+01'
Från handboken :
Så tidszonsträng som används för SET TIME ZONE
(och visningen av SHOW timezone
, i enlighet med detta) eller AT TIME ZONE
konstruera använd motsatta tecknet av vad som visas i timestamp
(with time zone
) bokstavliga! Det är en mycket olycklig oenighet mellan ISO och SQL-standard å ena sidan och POSIX å andra sidan. (Jag tror att POSIX är skyldig.) Se:
Men 'CET'
eller 'UTC-01'
är båda fortfarande potentiellt fel för Paris eftersom de inte tar regler för sommartid hänsyn.
(Sommartid är ett av de mest idiotiska begreppen i mänsklighetens historia.)
Paris (som större delen av Europa) använder CET under vintern och CEST under sommaren. Dina tester med 'CET'
råkar bara jobba i november. Om du provar samma på sommaren får du fel resultat.
För att vara på den säkra sidan, använd alltid tidszonsnamnet 'Europe/Paris'
, som tar hänsyn till sommarregler. Samtalet är dyrare.
Funktionen current_time
tar hänsyn till sommarregler om din tidszonsinställning innebär några. Men 'UTC-01'
är en vanlig tidsförskjutning. Jag använder aldrig datatypen time with time zone
eller current_time
till att börja med. Manualen ännu en gång:
Tänk på:
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
Relaterat: