A volte è necessario specificare un fuso orario quando si utilizzano le funzioni datetime in Oracle.
Ma ci sono molti fusi orari là fuori. Come li ricordiamo tutti? E come facciamo a sapere che il nostro sistema supporta un determinato fuso orario?
Fortunatamente, possiamo interrogare il V$TIMEZONE_NAMES
visualizza per restituire un elenco di fusi orari validi.
Ricevi tutte le informazioni sul fuso orario
Il codice seguente restituisce tutte le righe e le colonne dalla vista:
SELECT * FROM V$TIMEZONE_NAMES;
Ci sono molte righe in questa visualizzazione, ma ecco come appaiono le prime 10 righe:
TZNAME TZABBREV CON_ID _____________________ ___________ _________ Africa/Abidjan LMT 0 Africa/Abidjan GMT 0 Africa/Accra LMT 0 Africa/Accra GMT 0 Africa/Accra +0020 0 Africa/Addis_Ababa LMT 0 Africa/Addis_Ababa EAT 0 Africa/Addis_Ababa +0230 0 Africa/Addis_Ababa +0245 0 Africa/Algiers LMT 0 ...
Possiamo vedere che ogni nome di regione del fuso orario ha più di un'abbreviazione corrispondente. Questo si occupa di cose come l'ora legale, ecc.
Ecco una tabella che delinea il significato di alcune abbreviazioni:
Abbreviazione del fuso orario | Significato |
---|---|
LMT | Tempo medio locale |
PMT | Tempo medio di Parigi |
BAGNATO | Ora dell'Europa occidentale |
OVEST | Ora legale dell'Europa occidentale |
CET | Ora dell'Europa centrale |
CEST | Ora legale dell'Europa centrale |
EET | Ora dell'Europa orientale |
EST | Ora estiva dell'Europa orientale |
Ottieni solo i nomi delle regioni
Possiamo usare il DISTINCT
o UNIQUE
clausola per restituire solo i nomi delle regioni del fuso orario senza duplicati.
SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Ecco come sono ora le prime 10 righe:
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Ottieni tutte le abbreviazioni per un determinato nome di fuso orario
Ecco un esempio di query che restituisce tutte le abbreviazioni per un determinato nome di fuso orario:
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Risultato:
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
Informazioni sui file di fuso orario
In Oracle Database, i nomi dei fusi orari sono contenuti nei file dei fusi orari.
Puoi interrogare il V$TIMEZONE_FILE
visualizza per vedere quale file di fuso orario è attualmente utilizzato dal database.
Esempio:
SELECT * FROM V$TIMEZONE_FILE;
Risultato:
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Il mio sistema utilizza la versione 32, che è il file di fuso orario predefinito per Oracle 19c (che è quello che sto usando). Questo file si trova nella seguente posizione:$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Consulta la documentazione di Oracle per la scelta di un file di fuso orario per ulteriori informazioni sui file di fuso orario.