Normalement les configurations d'Unix pour PC consid�re au d�marrage que 
l'horloge CMOS contient une heure locale (et non une heure UTC comme 
g�n�ralement constat� sur les autres syst�mes). Ceci est une tradition 
remontant aux premiers syst�mes d'exploitation pour PC, IBM PC-DOS, puis 
Microsoft MS-DOS, IBM OS/2, SCO...

Bref c'�tait une erreur de conception au d�part lors de la sp�cification des 
BIOS par IBM: le BIOS du PC ne savait pas faire de translation d'heure locale 
quand il lisait ou �crivait le CMOS, car il ne g�rait qu'une heure locale dans 
ses variables internes utilis�es par l'horloge logicielle utilis�e ensuite.

D'autre part, cette configuration d'horloge logicielle �tait n�cessaire car les 
premiers PC n'avait pas d'horloge temps-r�el, et que les premiers mod�les 
apparus avec une horloge "sauvegard�e" utilisaient un circuit pour montre � bas 
prix et trop lent pour �tre utilisable par les logiciels du PC. D'autre part un 
acc�s trop fr�quent � cette horloge CMOS l'aurait compl�tement d�r�gl�e, 
rendant cette "sauvegarde" inop�rante. Les PC devaient donc �tre �tre remis � 
l'heure � chaque d�marrage jusqu'� l'apparition de l'horloge CMOS qui n'�tait 
ensuite utilis�e par le BIOS que lors du boot ou d'un changement de l'heure 
locale.

Rien n'a �t� fait pour g�rer dans les BIOS une variable de zone locale (c'�tait 
trop compliqu� � int�grer dans le BIOS, qui par ailleurs aurait du g�rer toutes 
les zones locales d'heure d'�t�, ce qui ne peut pas �tre fix� dans le silicium, 
les r�gles de gestion de l'heure d'�t� �tant trop changeantes et politiques 
dans chaque pays qui applique cette heure certaines ann�es et pas d'autres, ou 
avec des d�calages d'une demi-heure, ou encore � des dates fix�es chaque ann�e 
pour des raisons culturelles ou religieuses). Il n'y avait pas Internet pour 
tout le monde � l'�poque. Donc connaitre et diffuser ces r�gles au plan mondial 
�tait passablement compliqu� pour les �diteurs de logiciels, et encore plus 
pour les utilisateurs, qui eux ne connaissent g�n�ralement bien que l'heure 
locale qu'ils appliquent au moment o� ils se servent de leur PC, et leur 
demander d'�diter un fichier de configuration pour l'heure d'�t� �tait trop 
compliqu�. Microsoft a omis de fournir des commandes suppl�mentaires pour 
r�gler la date autrement qu'en fixant l'heure locale. Il aurait pu pr�voir une 
commande demandant � l'utilisateur si l'heure d'�t� �tait utilis�e au moment de 
la saisie de l'heure avec TIME, mais il fallait aussi une heure pour indiquer 
l'heure UTC (Microsoft aurait pu r�gler �a quand il a introduit la commande 
COUNTRY dans son CONFIG.SYS, mais il ne l'a pas fait)! Bref l'heure UTC 
(anciennement heure GMT) est impossible � d�terminer dans ces vieux OS, qui ne 
savent g�rer que l'heure locale, et l'inscrivent b�tement dans l'horloge CMOS 
(qui d'ailleurs ne g�re pas non plus le si�cle courant). Je sauterai ici tout 
ce qui s'en est suivi sur le bug de l'an 2000...

Microsoft et IBM aurait pu aussi n�gocier avec les constructeurs de BIOS pour 
r�server un bit dans la CMOS pour indiquer que l'heure stock�e �tait en format 
UTC et non une heure locale. Personne ne l'a fait ou standardis�. Les 
fabriquants de BIOS auraient pu se concerter et sp�cifier cet usage, � charge 
ensuite des �diteurs de syst�mes d'exploitation de l'utiliser pour r�ger 
correctement l'heure. Tout ce flou et ce manque de r�flexion sur la gestion de 
l'heure sur le PC explique la complexit� de r�solution des bogues li�s � l'an 
2000. Au passage, devant ce cauchemar, il est �tonnant que la r�solution du 
bogue s'est faite de fa�on non concert�e, et chacun a pondu sa solution. 
Pourquoi diable n'avoir pas refix� une bonne fois les r�gles dans un consortium 
qui aurait r�gl� les sp�cifications de compatibilit� pour g�rer enfin l'heure 
UTC au sein du BIOS ?

Le changement est apparu avec Windows 3.11 (pas avant!), qui offrait enfin une 
fa�on simple de g�rer les fuseaux horaires, et de calculer l'heure UTC requise 
par les protocoles r�seau et le partage de fichiers. Depuis sur les PC, l'heure 
UTC est DEDUITE de l'heure locale fix�e par le mat�riel. Depuis OS/2 et Windows 
NT puis Windows 95 l'OS g�re sa propre horloge logicielle UTC plus pr�cise, et 
ind�pendante de l'horloge locale par logiciel du BIOS (partag�e avec MSDOS) et 
de l'horloge mat�rielle du CMOS. On a depuis lors 3 horloges distinctes sur 
tous les syst�mes d'exploitation dont Linux...

Maintenant comment r�gler l'�cart entre heure locale et heure UTC: c'est le 
role de la sp�cification ANSI sur la variable d'environnement TZ (et la 
fonction tzset() g�rant les "timezones").
Traditionnellement on indique uniquement un sigle en lettres indiquant le nom 
de la zone d'hiver (� afficher avec l'heure locale si on est en hivers), suivie 
du d�calage en heures (ou heures et minutes) avec l'heure UTC (d�calage n�gatif 
� l'Est de GMT en Europe, Afrique, Asie, Australie et Nouvelle-Z�lande, positif 
� l'Ouest de GMT en Am�rique et zone Pacifique � la date Am�ricaine). Par 
exemple, pour l'Europe occidentale continentale (sauf UK et Portugal) on 
indique "CET-1". On peut faire suivre cette indication par un sigle diff�rent 
pour l'heure d'�t�. Par exemple "CET-1CEST".

Note: il y a une ambiguit� sur la lettre � ajouter avant le T final. CET 
signifie "Central European Time". CST signifie "Central Standard Time" en 
Am�rique du Nord ou en Australie (d'o� la n�cessit� de rendre le sigle non 
ambigu avec l'indication num�rique du fuseau horaire apr�s le sigle). Les 
Nords-Am�ricains remplacent le "S" central par un "D" quand ils appliquent 
l'heure d'�t� (qu'ils appelle "daylight-saving time" ou DST qu'on traduit par 
"heure de pr�servation de la lumi�re du jour"), mais pas les Australiens ou 
N�o-z�landais qui appliquent l'heure d'�t� dans certaines zones seulement, et 
qu'ils appellent "summer time" ou heure d'�t�, car elle s'applique � l'inverse 
de l'h�misph�re Nord (autrement dit l'heure d'�t� commence au quatri�me 
trimestre d'une ann�e et s'ach�ve l'ann�e suivante au premier trimestre): pour 
eux le D de DST ne signifie rien, et le S de "summer time" se confond avec le S 
qu'on trouve dans leurs zones d'hivers "standard": WST (Western Standard Time), 
CST (Central Standard Time), EST (Eastern Standard Time). Aussi, les 
Australiens (mais d'autres aussi) ne distinguent pas le sigle de l'heure d'�t�. 
Cela pose quand m�me un probl�me entre les deux Etats limitrophes d'Australie 
du Sud (� Ad�la�de, qui utilise le fuseau CST et applique l'heure d'�t� CST), 
et d'Australie du Nord (� Darwin, dans le m�me fuseau CST, mais qui 
n'appliquent pas l'heure d'�t� � cause de sa position sub-tropicale ou les 
notions d'�t� et d'hiver se confondent!). Moralit�: il ne faut sa se fier � un 
seul sigle: par exemple CST est ambigu et ne d�signe que le nom du fuseau 
horaire standard connu localement, et � Chicago on pr�cisera "CST-6CDT", � 
Darwin on utilisera "CST+10", � Ad�la�de "CST+10CSST" ou "CST+10SAST".

Tout cela est tr�s bien mais �a n'indique toujours pas quand on applique 
l'heure d'�t�. Classiquement, c'est un fichier de base de donn�es qui d�termine 
les dates et heures de basculement � l'heure d'�t�. Sous Windows 95 et NT, 
cette base est stock�e dans la base de registres dans 
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\TimeZone. Un 
utilitaire "tzedit.exe" permet d'y inscrire de nouvelles r�gles ou de modifier 
les r�gles. Malheureusement, Windows ne permet pas de conserver une base 
historique de ces changements qui interviennent pour des raisons politiques et 
religieuses (allez voir un peu ce qui se passe en cas de changement de r�gime, 
d'ind�pendance d'un pays, en Australie, et en Israel ou en Iran o� un autre 
calendrier religieux d�termine les r�gles, ou quand tout bonnement les r�gles 
sont fix�es tous les ans par d�cision politique...): l'utilitaire ne permet de 
fixer que deux dates dans la m�me ann�e non sp�cifi�e pour un m�me fuseau 
sp�cifi�. Les r�gles de l'heure d'�t� ne sont simples qu'en Europe occidentale, 
et aux Etats-Unis, ou dans les pays tropicaux et �quatoriaux qui 
traditionnellement n'appliquent pas l'heure d'�t�. Et encore il faut savoir 
qu'il y a des exceptions. Et il y a ainsi dans le monde une bonne CENTAINE de 
r�gles. Sous Unix et Linux la configuration est stock�e g�l�ralement dans un 
r�pertoire "timezone" ou "zoneinfo" de "/usr/lib" ou "/usr/share/lib": voir le 
man de la commande "zic(1)" ou de la fonction "tzset(3)". Unix permet de g�rer 
TOUTES les r�gles du monde dans ces fichiers, et d'en garder un historique 
complet (mais il faut mettre � jour r�guli�rement ces fichiers ou les �diter 
manuellement, donc attention au format utilis�!)

Dans ton cas, tu indiques que tu affiches l'heure suivante: "date"="ven 09 jun 
2000 01:39:54 CEST", cela indique que l'heure affich�e est dans la zone CEST 
(autrement dit "Central European Summer Time"), donc tu as bien appliqu� 
l'heure d'�t� au 9 juin 2000 appliquable en France (une commande "date -u" te 
donnerait l'heure "="ven 08 jun 2000 23:39:54 UTC", c'est � dire avec 2 heures 
de d�calage entre l'heure fran�aise d'�t� et l'heure UTC).

Cela n'est par contre pas conforme avec l'indication "hwclock"="Thu Jun  8 
23:39:02 2000  -0.189095 seconds" donn�e par lecture de l'horloge mat�rielle 
(il ne devrait y avoir qu'une heure de d�calage en plus ou en moins, mais 
seulement apr�s un basuclement d'heure d'�t�/hivers).

Si tu as suivi ma discution, tu noteras que ce doit �tre l'heure stock�e 
�galement dans l'horloge CMOS g�r�e par le BIOS. En cas de passage � l'heure 
d'hivers, ton syst�me devrait modifier l'heure dans la CMOS pour garder la 
synchronisation. Comme c'est un processus longuet (l'horloge CMOS est TRES 
lente � r�agir), Linux peut �tre configur� pour ne pas le faire (comme le fait 
en standard Windows 95).

Dans ce cas, Linux garderait son heure UTC interne et ne toucherait pas � 
l'heure CMOS qui resterait sur l'heure locale d'�t� ou d'hivers, ce qui pose un 
probl�me �vident si ton syst�me plante et red�marre: l'horloge CMOS peut �tre 
rest� incorrectement en heure d'hivers ou d'�t�. Heureusement, il y a un 
standard quand m�me � ce niveau: la m�moire CMOS contient un bit r�serv� (mais 
seulement sur certains PC disposant de BIOS r�cents) permettant de savoir si le 
dernier r�glage fait par Windows ou Linux de l'horloge CMOS �tait une heure 
d'�t� ou d'hivers. Le BIOS ne g�re pas ce bit, mais il se contente de le garder.

Aussi, Linux propose une autre solution OPTIONNELLE (conforme � ce qu'on trouve 
sur d'autres syst�mes Unix non PC), qui est de conserver dans l'horloge CMOS 
non pas l'heure locale qui passe d'�t� en hivers, mais l'heure UTC. Cette 
solution a l'avantage de ne pas requ�rir l'utilisation de l'horloge CMOS en 
cours de fonctionnement du syst�me (cela donne un tr�s l�ger plus en 
performance de l'horloge syst�me, et am�liore la stabilit� de l'horloge 
mat�rielle dans le temps) mais le d�faut d'�tre compl�tement incompatible avec 
Windows ou les autres syst�mes, car il n'y a aucun standard d�fini au sein de 
la m�moire CMOS et reconnu par le BIOS, permettant de savoir que l'heure 
stock�e est une heure UTC et non une heure locale (le seul standard existant 
est de savoir si l'heure locale est l'heure locale d'hivers ou l'heure locale 
d'�t�).

Tu remarqueras que si tu bootes ton PC et vas dans la configuration du BIOS, 
ton PC "n'est pas � l'heure". En fait il a �t� r�gl� � l'heure UTC quand tu a 
fix� l'heure locale depuis Linux. C'est tr�s bien si Linux est ton seul syst�me 
d'exploitation.

Si tu r�tablit l'heure locale au sein de l'utilitaire de configuration du BIOS 
et que tu bootes sous Windows, OS/2, SCO, UnixWare, AiX-386, Solaris-386 ou 
DGuX, ton syst�me sera bien � la bonne heure. Mais si tu bootes sous Linux, ton 
syst�me aura deux heures d'avance en �t� (CEST), ou 1 heure en hivers (CET), ce 
qui d�montre que l'option propos�e par Linux n'est pas standard et ne doit pas 
�tre utilis�e en cas de coexistence de plusieurs syst�mes! Bref, dans le cas 
d'un interfonctionnement Windows/Linux il ne faut pas l'utiliser et 
reconfigurer Linux avec son comportement par d�faut.

> ----- Original Message ----- 
From: "christian grimaux" <[EMAIL PROTECTED]>
To: "Debian en fran�ais" <[email protected]>
Sent: Friday, June 09, 2000 2:11 AM
Subject: mise � l'heure pour dual-boot


> Suite � une installation un peut pr�cipit�, j'ai mal configur� l'heure.
> Je fonctionne en dual-boot, Win-Linux (debian slink noyau 2.0.36).
> Depuis, Linux remet syst�matiquement � l'heure (mauvaise) l'horloge
> (cmos) et win est en retard. 
> hwclock me donne :
> Thu Jun  8 23:39:02 2000  -0.189095 seconds
> et date me donne
> ven 09 jun 2000 01:39:54 CEST
> La lecture du Mini HOWTO Clock et des pages de man (dont hwclock en
> anglais :( ) ne m'ont pas �t� d'un grand secour. Les autres info que
> j'ai pus glaner cite soit des machines toujours connect�, soit avec un
> seul os.
> Alors :
> Comment faire pour que seul un des deux syst�mes remette l'horloge �
> l'heure?
> Comment r�gler l'heure pour avoir le bon fuseau ?(c'est lequel?)
> (les propositions et les explications fournies au d�marrage sont plutot
> obscures (� moins que ce ne soit moi qui le soit?))
> A+ et Merci.
> --
> Christian GRIMAUX mailto://[EMAIL PROTECTED]
> Association .DLL http://altern.org/dll
> 
> 
> --  
> To UNSUBSCRIBE, email to [EMAIL PROTECTED]
> with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
> 


Répondre à