PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Obsługa osobliwych stref czasowych w bazie danych Postgres

Problem wydaje się nie mieć związku z Amazon RDS:ma związek z konwencją stosowaną przez PostgreSQL. W takim przypadku tak mieć nazwę strefy czasowej wstecz. Masz na myśli 'UTC-01' gdzie piszesz 'UTC+01' .
Z instrukcji :

Tak więc ciąg strefy czasowej używany do SET TIME ZONE (i wyświetlanie SHOW timezone , odpowiednio) lub AT TIME ZONE konstrukcja użyj znaku przeciwnego tego, co jest wyświetlane w timestamp (with time zone ) literały! To bardzo niefortunna różnica zdań między standardem ISO i SQL z jednej strony a POSIX z drugiej. (Myślę, że POSIX jest winny.) Zobacz:

Ale 'CET' lub 'UTC-01' obaj nadal potencjalnie się mylą dla Paryża, ponieważ nie przyjmują zasad czasu letniego pod uwagę.
(DST jest jednym z najbardziej idiotycznych pojęć w historii ludzkości.)

Paryż (jak większość Europy) używa CET zimą i CEST latem. Twoje testy z 'CET' po prostu zdarzyło się pracować w listopadzie. Jeśli spróbujesz tego samego latem, otrzymasz zły wynik.

Aby być bezpiecznym, zawsze używaj nazwy strefy czasowej 'Europe/Paris' , który uwzględnia reguły czasu letniego. Połączenie jest droższe.

Funkcja current_time bierze pod uwagę reguły czasu letniego, jeśli ustawienie strefy czasowej je zakłada. Ale 'UTC-01' jest zwykłym przesunięciem czasowym. Nigdy nie używam typu danych time with time zone lub current_time najpierw. Instrukcja jeszcze raz:

Rozważ:

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

Powiązane:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawić, by wyliczenia Java i Postgres współpracowały ze sobą w celu aktualizacji?

  2. Postgres wstawia wiersz tylko wtedy, gdy liczba wierszy jest poniżej limitu

  3. PostgreSQL:Usuń bazę danych PostgreSQL za pomocą wiersza poleceń

  4. Jak stworzyć użytkownika postgresql za pomocą tkaniny?

  5. python dodaje E do łańcucha