Podczas pracy z PostgreSQL możesz czasami znaleźć się w sytuacji, w której potrzebujesz listy stref czasowych rozpoznawanych przez Postgres.
Na przykład możesz próbować ustawić strefę czasową dla bieżącej sesji lub możesz użyć jednej z funkcji datetime, które umożliwiają manipulowanie strefą czasową.
Poniżej znajdują się dwa widoki i dwie funkcje, które zwracają listę stref czasowych.
Widok pg_timezone_abbrevs
pg_timezone_abbrevs
Widok zawiera listę skrótów stref czasowych, które są obecnie rozpoznawane przez funkcje daty/godziny.
Oto jak wygląda 10 górnych rzędów:
SELECT *
FROM pg_timezone_abbrevs
LIMIT 10;
Wynik:
abbrev | utc_offset | is_dst --------+------------+-------- ACDT | 10:30:00 | t ACSST | 10:30:00 | t ACST | 09:30:00 | f ACT | -05:00:00 | f ACWST | 08:45:00 | f ADT | -03:00:00 | t AEDT | 11:00:00 | t AESST | 11:00:00 | t AEST | 10:00:00 | f AFT | 04:30:00 | f
is_dst
kolumna wskazuje, czy jest to skrót czasu letniego.
Zwróć uwagę, że zawartość tego widoku zmienia się, gdy timezone_abbreviations
parametr run-time został zmodyfikowany.
Zwróć też uwagę, że dokumentacja Postgresa stwierdza:
Podczas gdy większość skrótów stref czasowych reprezentuje stałe przesunięcia względem czasu UTC, istnieją takie, które historycznie różniły się wartością (więcej informacji znajduje się w sekcji B.4). W takich przypadkach ten widok przedstawia ich aktualne znaczenie.
Funkcja pg_timezone_abbrevs()
Możesz alternatywnie użyć pg_timezone_abbrevs()
funkcja zwracająca wyniki jako SETOF.
SELECT pg_timezone_abbrevs()
LIMIT 10;
Wynik:
pg_timezone_abbrevs ------------------- (ACDT,10:30:00,t) (ACSST,10:30:00,t) (ACST,09:30:00,f) (ACT,-05:00:00,f) (ACWST,08:45:00,f) (ADT,-03:00:00,t) (AEDT,11:00:00,t) (AESST,11:00:00,t) (AEST,10:00:00,f) (AFT,04:30:00,f)
Możesz również użyć następującej składni, aby w razie potrzeby zwrócić wyniki w oddzielnych kolumnach.
SELECT *
FROM pg_timezone_abbrevs()
LIMIT 10;
Wynik:
abbrev | utc_offset | is_dst --------+------------+-------- ACDT | 10:30:00 | t ACSST | 10:30:00 | t ACST | 09:30:00 | f ACT | -05:00:00 | f ACWST | 08:45:00 | f ADT | -03:00:00 | t AEDT | 11:00:00 | t AESST | 11:00:00 | t AEST | 10:00:00 | f AFT | 04:30:00 | f
Widok pg_timezone_names
pg_timezone_names
view zawiera listę nazw stref czasowych, które są rozpoznawane przez SET TIMEZONE
, wraz z powiązanymi skrótami, przesunięciami UTC i stanem czasu letniego.
Oto jak wygląda 10 górnych rzędów:
SELECT *
FROM pg_timezone_names
LIMIT 10;
Wynik:
name | abbrev | utc_offset | is_dst ------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Indian/Chagos | +06 | 06:00:00 | f Indian/Mayotte | EAT | 03:00:00 | f Indian/Christmas | +07 | 07:00:00 | f Indian/Cocos | +0630 | 06:30:00 | f Indian/Maldives | +05 | 05:00:00 | f Indian/Comoro | EAT | 03:00:00 | f Indian/Reunion | +04 | 04:00:00 | f Indian/Mahe | +04 | 04:00:00 | f Indian/Kerguelen | +05 | 05:00:00 | f
is_dst
kolumna wskazuje, czy strefa czasowa aktualnie stosuje czas letni.
W tym widoku dokumentacja Postgresa stwierdza:
W przeciwieństwie do skrótów pokazanych w
pg_timezone_abbrevs
, wiele z tych nazw oznacza zestaw reguł dotyczących dat przejścia na czas letni. Dlatego powiązane informacje zmieniają się poza lokalnymi granicami czasu letniego. Wyświetlane informacje są obliczane na podstawie bieżącej wartościCURRENT_TIMESTAMP
.
Funkcja pg_timezone_names()
Możesz także użyć pg_timezone_names()
funkcja zwracająca wyniki jako SETOF.
SELECT pg_timezone_names()
LIMIT 10;
Wynik:
pg_timezone_names --------------------------------- (Indian/Mauritius,+04,04:00:00,f) (Indian/Chagos,+06,06:00:00,f) (Indian/Mayotte,EAT,03:00:00,f) (Indian/Christmas,+07,07:00:00,f) (Indian/Cocos,+0630,06:30:00,f) (Indian/Maldives,+05,05:00:00,f) (Indian/Comoro,EAT,03:00:00,f) (Indian/Reunion,+04,04:00:00,f) (Indian/Mahe,+04,04:00:00,f) (Indian/Kerguelen,+05,05:00:00,f)
Możesz również użyć następującej składni, aby zwrócić wyniki w oddzielnych kolumnach.
SELECT * FROM pg_timezone_names()
LIMIT 10;
Wynik:
name | abbrev | utc_offset | is_dst ------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Indian/Chagos | +06 | 06:00:00 | f Indian/Mayotte | EAT | 03:00:00 | f Indian/Christmas | +07 | 07:00:00 | f Indian/Cocos | +0630 | 06:30:00 | f Indian/Maldives | +05 | 05:00:00 | f Indian/Comoro | EAT | 03:00:00 | f Indian/Reunion | +04 | 04:00:00 | f Indian/Mahe | +04 | 04:00:00 | f Indian/Kerguelen | +05 | 05:00:00 | f