Zdá se, že problém nesouvisí s Amazon RDS:souvisí s konvencí používanou PostgreSQL. V tomto případě děláte mít název časového pásma dozadu. Máte na mysli 'UTC-01'
kam napíšete .'UTC+01'
Z příručky :
Takže řetězec časového pásma používaný pro SET TIME ZONE
(a zobrazení SHOW timezone
, podle toho) nebo AT TIME ZONE
konstrukce použijte opačné znaménko toho, co je zobrazeno v timestamp
(with time zone
) doslovy! To je velmi nešťastná neshoda mezi ISO a SQL standardem na jedné straně a POSIXem na straně druhé. (Myslím, že za to může POSIX.) Viz:
Ale 'CET'
nebo 'UTC-01'
oba jsou stále potenciálně špatně pro Paříž, protože nepřijímají pravidla pro letní čas v úvahu.
(DST je jedním z nejhloupějších pojmů v historii lidstva.)
Paříž (stejně jako většina Evropy) používá CET v zimě a CEST v létě. Vaše testy s 'CET'
náhodou v listopadu do práce. Pokud totéž zkusíte v létě, dostanete špatný výsledek.
Pro jistotu vždy používejte název časového pásma 'Europe/Paris'
, která bere v úvahu pravidla DST. Hovor je dražší.
Funkce current_time
bere v úvahu pravidla DST, pokud nastavení vašeho časového pásma nějaké předpokládá. Ale 'UTC-01'
je prostý časový posun. Nikdy nepoužívám datový typ time with time zone
nebo current_time
začít s. Ještě jednou manuál:
Zvažte:
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
Související:
-
Čas názvy zón s identickými vlastnostmi dávají při použití na časové razítko jiný výsledek
-
Uložení časového pásma v datovém typu "timestamp with časové pásmo"