sql >> Databáze >  >> RDS >> PostgreSQL

Zvláštní zpracování časových pásem v databázi Postgres

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í:




  1. Jak uložit dokončený polygon body leaflet.draw do mysql tabulky

  2. výběr po sobě jdoucích čísel pomocí SQL dotazu

  3. Proč MySQL nepoužívá optimální indexy

  4. nelze dosáhnout připojení k databázi MySQL na vzdáleném počítači