Parfois, nous devons spécifier un fuseau horaire lors de l'utilisation des fonctions datetime dans Oracle.
Mais il y a beaucoup de fuseaux horaires. Comment se souvient-on de tous ? Et comment savons-nous que notre système prend en charge un fuseau horaire donné ?
Heureusement, nous pouvons interroger le V$TIMEZONE_NAMES
view pour renvoyer une liste de fuseaux horaires valides.
Obtenir toutes les informations sur le fuseau horaire
Le code suivant renvoie toutes les lignes et colonnes de la vue :
SELECT * FROM V$TIMEZONE_NAMES;
Il y a beaucoup de lignes dans cette vue, mais voici à quoi ressemblent les 10 premières lignes :
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 ...
Nous pouvons voir que chaque nom de région de fuseau horaire a plus d'une abréviation correspondante. Cela couvre des choses comme l'heure d'été, etc.
Voici un tableau qui décrit la signification de certaines abréviations :
Abréviation du fuseau horaire | Signification |
---|---|
LMT | Heure moyenne locale |
PMT | Heure moyenne de Paris |
HUMIDE | Heure d'Europe de l'Ouest |
OUEST | Heure d'été d'Europe occidentale |
HEC | Heure d'Europe centrale |
CEST | Heure d'été d'Europe centrale |
EET | Heure de l'Europe de l'Est |
EST | Heure d'été de l'Europe de l'Est |
Obtenir uniquement les noms de région
Nous pouvons utiliser le DISTINCT
ou UNIQUE
clause pour renvoyer uniquement les noms de région de fuseau horaire sans doublons.
SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Voici à quoi ressemblent maintenant les 10 premières lignes :
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Obtenir toutes les abréviations pour un nom de fuseau horaire donné
Voici un exemple de requête renvoyant toutes les abréviations d'un nom de fuseau horaire :
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Résultat :
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
À propos des fichiers de fuseau horaire
Dans Oracle Database, les noms de fuseau horaire sont contenus dans des fichiers de fuseau horaire.
Vous pouvez interroger le V$TIMEZONE_FILE
vue pour voir quel fichier de fuseau horaire est actuellement utilisé par la base de données.
Exemple :
SELECT * FROM V$TIMEZONE_FILE;
Résultat :
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Mon système utilise la version 32, qui est le fichier de fuseau horaire par défaut pour Oracle 19c (ce que j'utilise). Ce fichier se trouve à l'emplacement suivant :$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Consultez la documentation d'Oracle pour le choix d'un fichier de fuseau horaire pour plus d'informations sur les fichiers de fuseau horaire.