Når du arbejder med PostgreSQL, kan du af og til stå i den situation, hvor du har brug for en liste over tidszoner, som Postgres genkender.
For eksempel kan du prøve at indstille tidszonen for din aktuelle session, eller du kan bruge en af datetime-funktionerne, der giver dig mulighed for at manipulere tidszonen.
Nedenfor er to visninger og to funktioner, der returnerer en liste over tidszoner.
Pg_timezone_abbrevs-visningen
pg_timezone_abbrevs
visningen giver en liste over tidszoneforkortelser, der i øjeblikket genkendes af datetime-funktionerne.
Sådan ser de øverste 10 rækker ud:
SELECT *
FROM pg_timezone_abbrevs
LIMIT 10;
Resultat:
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
kolonne angiver, om dette er en sommerforkortelse eller ej.
Bemærk, at indholdet af denne visning ændres, når timezone_abbreviations
runtime parameter er ændret.
Bemærk også, at Postgres-dokumentationen siger:
Mens de fleste tidszoneforkortelser repræsenterer faste forskydninger fra UTC, er der nogle, der historisk har varieret i værdi (se afsnit B.4 for mere information). I sådanne tilfælde præsenterer dette synspunkt deres nuværende betydning.
Pg_timezone_abbrevs()-funktionen
Du kan alternativt bruge pg_timezone_abbrevs()
funktion for at returnere resultaterne som et SETOF.
SELECT pg_timezone_abbrevs()
LIMIT 10;
Resultat:
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)
Du kan også bruge følgende syntaks til at returnere resultaterne i separate kolonner, hvis det kræves.
SELECT *
FROM pg_timezone_abbrevs()
LIMIT 10;
Resultat:
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
Pg_timezone_names-visningen
pg_timezone_names
visningen giver en liste over tidszonenavne, der genkendes af SET TIMEZONE
, sammen med deres tilknyttede forkortelser, UTC-forskydninger og sommertid-status.
Sådan ser de øverste 10 rækker ud:
SELECT *
FROM pg_timezone_names
LIMIT 10;
Resultat:
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
kolonne angiver, om tidszonen i øjeblikket observerer sommertid eller ej.
Til denne visning står der i Postgres-dokumentationen:
I modsætning til forkortelserne vist i
pg_timezone_abbrevs
, indebærer mange af disse navne et sæt regler for overgangsdato for sommertid. Derfor ændres de tilknyttede oplysninger på tværs af lokale sommertid-grænser. De viste oplysninger er beregnet ud fra den aktuelle værdi afCURRENT_TIMESTAMP
.
Pg_timezone_names()-funktionen
Du kan også bruge pg_timezone_names()
funktion for at returnere resultaterne som et SETOF.
SELECT pg_timezone_names()
LIMIT 10;
Resultat:
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)
Du kan også bruge følgende syntaks til at returnere resultaterne i separate kolonner.
SELECT * FROM pg_timezone_names()
LIMIT 10;
Resultat:
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