Fuseaux horaire sous GNU/Linux.

A l’origine, un fuseau horaire est une zone géographique avec une heure unique, ceci dit, pour des raisons propres (ou communes), un pays peut avoir son propre fuseau horaire qui de plus change au cours de l’année pour des questions d’économie d’énergie (DST: Day light saving time).

GNU/Linux utilise le fichier /etc/locatime pour connaître le fuseau horaire en fonction sur le système. Ce fichier est souvent une copie ou lien vers un fichier de la base de données tzdata fourni par le paquet du même nom (sous la plupart des distributions).

Ces fichiers ne sont pas lisibles, mais on peut avoir des informations dessus avec l’utilitaire zdump:

$ zdump /etc/localtime /usr/share/zoneinfo/Europe/Paris /usr/share/zoneinfo/Europe/London 
/etc/localtime                     Sun Oct 31 20:44:43 2010 CET
/usr/share/zoneinfo/Europe/Paris   Sun Oct 31 20:44:43 2010 CET
/usr/share/zoneinfo/Europe/London  Sun Oct 31 19:44:43 2010 GMT

On peut aussi avoir la liste des changements d’heure selon le fuseau horaire:

$ zdump -v /usr/share/zoneinfo/Europe/Paris | grep 2010
/usr/share/zoneinfo/Europe/Paris  Sun Mar 28 00:59:59 2010 UTC = Sun Mar 28 01:59:59 2010 CET isdst=0
/usr/share/zoneinfo/Europe/Paris  Sun Mar 28 01:00:00 2010 UTC = Sun Mar 28 03:00:00 2010 CEST isdst=1
/usr/share/zoneinfo/Europe/Paris  Sun Oct 31 00:59:59 2010 UTC = Sun Oct 31 02:59:59 2010 CEST isdst=1
/usr/share/zoneinfo/Europe/Paris  Sun Oct 31 01:00:00 2010 UTC = Sun Oct 31 02:00:00 2010 CET isdst=0

GNU/linux utilise une horloge système et une matérielle (celle du BIOS).

$ hwclock --debug
hwclock de util-linux-ng 2.18
Utilisant /dev interface to clock.
Le dernier ajustement de dérive a été fait 1288551786 secondes après 1969
La dernière calibration a été faite 1288300319 secondes après 1969
L'horloge matérielle fonctionne selon le temps UTC
On assume que l'horloge matérielle est conservée dans le temps de UTC.
En attente d'un tic d'horloge...
...a obtenu un tic d'horloge
Heure lu de l'horloge matérielle: 2010/10/31 19:06:52
Heure de l'horloge matérielle : 2010/10/31 19:06:52 = 1288552012 secondes depuis 1969
dim. 31 oct. 2010 20:06:52 CET  -0.307298 secondes

Si elle est configurée comme étant le temps universel (UTC), le résultat d’une demande d’heure est en fait l’heure UTC + le décalage du fuseau, donc du moment que le fichier /etc/localtime est bien configuré, le système suivra les changements d’heure sans souci.

Par contre, si votre horloge matérielle est configurée pour correspondre à l’heure locale, le système ne fait pas grand chose et le changement d’heure ne se fait pas automatiquement. Mais comme on règle l’heure matérielle sur l’heure locale seulement quand on a un Microsoft Windows en dual boot, l’heure sera réglée par ce dernier.

Sinon il faut le faire manuellement:

date 10312008

Et comme le système garde une trace du décalage de l’heure matérielle, il serait bon de la régler pour ne pas faire croire au système que le matériel dérive d’une heure:

hwclock --noadjfile --localtime -w