Při práci s PostgreSQL se občas můžete dostat do situace, kdy potřebujete seznam časových pásem, které Postgres rozpoznává.
Můžete se například pokoušet nastavit časové pásmo pro vaši aktuální relaci nebo můžete používat jednu z funkcí datetime, která vám umožňuje manipulovat s časovým pásmem.
Níže jsou dvě zobrazení a dvě funkce, které vracejí seznam časových pásem.
Zobrazení pg_timezone_abbrevs
pg_timezone_abbrevs
zobrazení poskytuje seznam zkratek časových pásem, které jsou aktuálně rozpoznávány funkcemi datetime.
Zde je návod, jak vypadá prvních 10 řádků:
SELECT *
FROM pg_timezone_abbrevs
LIMIT 10;
Výsledek:
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
sloupec označuje, zda se jedná o zkratku pro letní čas.
Všimněte si, že obsah tohoto zobrazení se změní, když timezone_abbreviations
run-time parametr je upraven.
Všimněte si také, že dokumentace Postgres uvádí:
Zatímco většina zkratek časových pásem představuje pevné odchylky od UTC, existují některé, jejichž hodnota se historicky lišila (další informace naleznete v části B.4). V takových případech tento pohled představuje jejich aktuální význam.
Funkce pg_timezone_abbrevs()
Alternativně můžete použít pg_timezone_abbrevs()
funkce vrátit výsledky jako SETOF.
SELECT pg_timezone_abbrevs()
LIMIT 10;
Výsledek:
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)
V případě potřeby můžete také použít následující syntaxi k vrácení výsledků v samostatných sloupcích.
SELECT *
FROM pg_timezone_abbrevs()
LIMIT 10;
Výsledek:
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
Zobrazení pg_timezone_names
pg_timezone_names
zobrazení poskytuje seznam názvů časových pásem, které jsou rozpoznány pomocí SET TIMEZONE
, spolu s jejich přidruženými zkratkami, offsety UTC a stavem letního času.
Zde je návod, jak vypadá prvních 10 řádků:
SELECT *
FROM pg_timezone_names
LIMIT 10;
Výsledek:
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
udává, zda časové pásmo aktuálně platí letní čas.
Pro tento pohled je v dokumentaci Postgres uvedeno:
Na rozdíl od zkratek zobrazených v
pg_timezone_abbrevs
, mnoho z těchto názvů implikuje sadu pravidel pro datum přechodu na letní čas. Proto se související informace mění přes místní hranice DST. Zobrazené informace jsou vypočítány na základě aktuální hodnotyCURRENT_TIMESTAMP
.
Funkce pg_timezone_names()
Můžete také použít pg_timezone_names()
funkce vrátit výsledky jako SETOF.
SELECT pg_timezone_names()
LIMIT 10;
Výsledek:
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)
K vrácení výsledků v samostatných sloupcích můžete také použít následující syntaxi.
SELECT * FROM pg_timezone_names()
LIMIT 10;
Výsledek:
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