PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Restituisce un elenco di fusi orari supportati da PostgreSQL

Quando lavori con PostgreSQL, potresti trovarti occasionalmente nella situazione in cui hai bisogno di un elenco di fusi orari che Postgres riconosce.

Ad esempio, potresti provare a impostare il fuso orario per la tua sessione corrente o potresti utilizzare una delle funzioni datetime che ti consentono di manipolare il fuso orario.

Di seguito sono riportate due viste e due funzioni che restituiscono un elenco di fusi orari.

La vista pg_timezone_abbrevs

Il pg_timezone_abbrevs view fornisce un elenco di abbreviazioni di fuso orario attualmente riconosciute dalle funzioni datetime.

Ecco come appaiono le prime 10 righe:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10;

Risultato:

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

Il is_dst colonna indica se si tratta o meno di un'abbreviazione di ora legale.

Nota che il contenuto di questa vista cambia quando timezone_abbreviations il parametro runtime viene modificato.

Nota inoltre che la documentazione di Postgres afferma:

Sebbene la maggior parte delle abbreviazioni di fuso orario rappresentino scostamenti fissi rispetto all'ora UTC, ce ne sono alcune che hanno storicamente variato di valore (vedere la Sezione B.4 per ulteriori informazioni). In questi casi questa visione presenta il loro significato attuale.

La funzione pg_timezone_abbrevs()

In alternativa puoi usare pg_timezone_abbrevs() funzione per restituire i risultati come SETOF.

SELECT pg_timezone_abbrevs()
LIMIT 10;

Risultato:

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)

Puoi anche utilizzare la seguente sintassi per restituire i risultati in colonne separate, se necessario.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10;

Risultato:

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

La vista pg_timezone_names

I pg_timezone_names view fornisce un elenco di nomi di fuso orario riconosciuti da SET TIMEZONE , insieme alle abbreviazioni associate, alle differenze UTC e allo stato dell'ora legale.

Ecco come appaiono le prime 10 righe:

SELECT * 
FROM pg_timezone_names
LIMIT 10;

Risultato:

       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

Il is_dst la colonna indica se il fuso orario sta attualmente osservando l'ora legale.

Per questa visualizzazione, la documentazione di Postgres afferma:

A differenza delle abbreviazioni mostrate in pg_timezone_abbrevs , molti di questi nomi implicano una serie di regole relative alla data di transizione all'ora legale. Pertanto, le informazioni associate cambiano oltre i confini dell'ora legale locale. Le informazioni visualizzate vengono calcolate in base al valore corrente di CURRENT_TIMESTAMP .

La funzione pg_timezone_names()

Puoi anche usare pg_timezone_names() funzione per restituire i risultati come SETOF.

SELECT pg_timezone_names()
LIMIT 10;

Risultato:

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)

Puoi anche utilizzare la seguente sintassi per restituire i risultati in colonne separate.

SELECT * FROM pg_timezone_names()
LIMIT 10;

Risultato:

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