III. Fonctionnement de l'horloge sous Windows▲
Tout développement de logiciel pour Windows nécessite, au préalable, une bonne connaissance de ce système d'exploitation.
Dans le cadre d'applications manipulant les dates et les heures, vous devez comprendre comment Windows gère ces données.
Contrairement à ce que peut croire un utilisateur classique, il y a une différence entre l'heure affichée dans la boîte de dialogue « Propriétés de Date/Heure » et l'heure du système, proprement dite.
III-A. Heure « système » et heure locale▲
Windows gère les dates et les heures grâce à un processus relativement simple.
En effet, il prend en compte les paramètres suivants :
- heure GMT / UTC ;
- décalage horaire du fuseau horaire ;
- décalage horaire de l'heure d'été.
En interne, Windows stocke l'heure GMT/UTC, il s'agit de l'heure dite "système'.
Pour afficher l'heure locale, il prend, tout d'abord, en compte le fuseau horaire et ajoute le décalage horaire prévu.
Enfin, il teste si votre région est soumise à l'heure d'été ; si c'est le cas, il ajoute le décalage horaire prévu.
Voici une représentation graphique de ce qui se passe en interne :
Concrètement, Windows calcule l'heure locale pour Paris (GMT+01:00) de la manière suivante :
Période |
Fonction mathématique |
---|---|
Hiver |
Heure locale = Heure Système + Décalage fuseau horaire |
Été |
Heure locale = Heure Système + Décalage fuseau horaire + Décalage heure d'été |
Heure « Système », heure locale, fuseau horaire, heure d'été… Toutes ces informations sont importantes, mais où et comment peut-on récupérer ces valeurs sous Windows ?
III-B. Les informations « Date/Heure » sous Windows▲
Les informations « Date/Heure » sont stockées dans le registre de Windows.
Lorsque l'utilisateur ouvre la boîte de dialogue « Propriétés de Date/Heure », Windows fait appel à plusieurs clés de registre que nous allons étudier une à une.
Nous verrons ensuite comment créer un petit programme Delphi permettant de récupérer ces informations.
III-B-1. Les fuseaux horaires disponibles dans le registre de Windows▲
Comme nous l'avons vu précédemment, Windows stocke le décalage horaire à appliquer en fonction du fuseau horaire. Dans le registre, les fuseaux horaires se nomment « Time Zones » et se situent à la clé de registre suivante :
OS |
Clé de registre |
---|---|
Win 9x |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\ |
Win NT / 2000 |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\ |
Dans cette clé de registre, vous trouverez 74 sous-clés contenant les paramètres spécifiques à chaque fuseau horaire (Time Zone) :
La « Time Zone » de Paris est stockée dans la sous-clé de registre « Romance Standard Time ».
Chaque clé « Time Zone » contient six sous-clés que nous allons voir en détail…
Voici le descriptif de chacune des sous-clés disponibles par clé « Time Zone » :
Display ( Affichage ) |
|
---|---|
Aperçu |
|
Type de donnée |
REG_SZ (Chaîne de caractères) |
Contenu |
Nom explicite du fuseau horaire |
Exemple d'utilisation |
|
Dlt (« Daylight » - Heure d'été) |
|
Aperçu |
|
Type de donnée |
REG_SZ (Chaîne de caractères) |
Contenu |
Nom explicite de l'heure locale en période d'heure d'été |
Exemple d'utilisation |
|
Index |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Valeur notamment utilisée pour ordonner tous les fuseaux horaires de (GMT-12:00) à (GMT+12:00) en passant par le fuseau horaire (GMT). |
Exemple d'utilisation |
|
MapID |
|
Aperçu |
|
Type de donnée |
REG_SZ (Chaîne de caractères) |
Contenu |
Valeur notamment utilisée pour afficher la carte correspondant au fuseau horaire. |
Exemple d'utilisation |
|
Std (« Standard ») |
|
Aperçu |
|
Type de donnée |
REG_SZ (Chaîne de caractères) |
Contenu |
Nom explicite de l'heure locale hors période d'heure d'été |
Exemple d'utilisation |
|
TZI (« Time Zone Information » - Informations de fuseau horaire) |
|
Aperçu |
|
Type de donnée |
REG_BINARY (Enregistrement binaire). |
Contenu |
Valeur contenant toutes les informations propres à un fuseau horaire :
Nous verrons le contenu précis de cette valeur quand nous utiliserons Delphi, dans la suite de ce tutoriel. |
Vous savez désormais où sont stockés les fuseaux horaires dans le registre de Windows et quelles sont les informations disponibles.
Cependant, pour que l'heure locale soit juste, il faut que Windows stocke les paramètres propres à votre situation géographique, c'est l'objet de la prochaine rubrique.
III-B-2. Les informations propres au fuseau horaire local▲
Où sont stockées les données propres au système ?
Ces données font partie des « Paramètres régionaux » (Win 9x) ou « Options régionales » (Win 2000) et sont stockées dans la clé de registre suivante :
OS |
Clé de registre |
---|---|
Win 9x / NT / 2000 |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\ |
Dans cette clé de registre, vous trouverez huit sous-clés de registre :
Voici le descriptif de chacune des sous-clés disponibles :
ActiveTimeBias (Décalage horaire actif) |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Décalage horaire actif |
Bias (Décalage horaire) |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Décalage horaire normal |
DaylightBias (Décalage horaire d'été) |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Décalage horaire à appliquer en période d'heure d'été |
DaylightName (Nom du décalage horaire d'été) |
|
Aperçu |
|
Type de donnée |
REG_SZ (Chaîne de caractères) |
Contenu |
Nom du décalage horaire à appliquer en période d'heure d'été |
DaylightStart (Démarrage de l'horaire d'été) |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Date et heure auxquelles démarre la période d'heure d'été |
StandardBias (Décalage horaire standard) |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Décalage horaire normal |
StandardName (Nom du décalage horaire standard) |
|
Aperçu |
|
Type de donnée |
REG_SZ (Chaîne de caractères) |
Contenu |
Nom du décalage horaire à appliquer hors période d'heure d'été |
StandardStart (Démarrage de l'horaire standard) |
|
Aperçu |
|
Type de donnée |
REG_DWORD (Valeur entière à représentation décimale ou hexadécimale) |
Contenu |
Date et heure auxquelles démarre la période d'horaire normal (Heure d'hiver) |