System time (Français)

État de la traduction:
Cet article est la version francophone de
System time
. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
Network Time Protocol daemon
OpenNTPD
Chrony
systemd-timesyncd (Français)
Dans un système d'exploitation, l'heure (horloge) est déterminée par trois éléments : la valeur de l'heure, qu'il s'agisse de l'heure locale, de l'heure UTC ou d'une autre valeur, le fuseau horaire et l'heure d'été (DST), le cas échéant. Cet article explique ce qu'ils sont et comment les lire/régler. Deux horloges sont présentes sur les systèmes : une horloge matérielle et une horloge système qui sont également détaillées dans cet article.
Le comportement standard de la plupart des systèmes d'exploitation est le suivant :
Régler l'horloge système à partir de l'horloge matérielle au démarrage.
Maintenir une heure précise de l'horloge système, consultez
#Synchronisation du temps
.
Régler l'horloge matérielle à partir de l'horloge système à l'extinction.
Horloge matérielle
L'
horloge matérielle
(aussi appelée horloge en temps réel (RTC) ou horloge CMOS) enregistre les valeurs suivantes : Année, Mois, Jour, Heure, Minute et Secondes.  Seuls les microprogrammes
UEFI
de 2016, ou plus récents, ont la capacité de stocker le fuseau horaire, et si l'heure d'été est utilisée.
Lire l'horloge matérielle
# hwclock --show
Régler l'horloge matérielle à partir de l'horloge système
Ce qui suit définit l'horloge matérielle à partir de l'horloge système. De plus, elle met à jour
/etc/adjtime
ou la crée si elle n'existe pas. Consultez
hwclock(8) § The Adjtime File
pour plus d'informations sur ce fichier ainsi que la section
#Décalage horaire
.
# hwclock --systohc
Horloge système
L'
horloge système
(alias l'horloge logicielle) garde la trace de : l'heure, le fuseau horaire, et l'heure d'été si applicable. Elle est calculée par le noyau Linux comme le nombre de secondes depuis minuit le 1er janvier 1970, UTC. La valeur initiale de l'horloge système est calculée à partir de l'horloge matérielle, en fonction du contenu de
/etc/adjtime
. Une fois le démarrage terminé, l'horloge système fonctionne indépendamment de l'horloge matérielle. Le noyau Linux garde la trace de l'horloge système en comptant les interruptions de la minuterie.
Lire l'horloge
Pour vérifier l'heure actuelle de l'horloge système (présentée à la fois en heure locale et en UTC) ainsi que la RTC (horloge matérielle) :
$ timedatectl
Régler l'horloge du système
Pour régler directement l'heure locale de l'horloge système :
# timedatectl set-time "aaaa-MM-jj hh:mm:ss"
Par exemple :
# timedatectl set-time "2014-05-26 11:13:54"
définit l'heure au 26 mai 2014, 11:13 et 54 secondes.
Standard de temps
Il existe deux standards de temps : L'heure locale (
localtime
) et
Temps universel coordonné
(
UTC
).  L'heure locale dépend du "fuseau horaire" (
timezone
) actuel, tandis que l'UTC est l'heure "globale" et est indépendante des valeurs du fuseau horaire.  Bien que conceptuellement différent, UTC est également connu sous le nom de GMT (Greenwich Mean Time).
La norme utilisée par l'horloge matérielle (horloge CMOS, l'heure du BIOS) est définie par le système d'exploitation. Par défaut, Windows utilise l'heure locale, macOS utilise l'heure UTC, les autres systèmes UNIX et de type UNIX varient. Un système d'exploitation qui utilise la norme UTC considère généralement l'horloge matérielle comme UTC et y apporte un ajustement pour définir l'heure du système d'exploitation au démarrage en fonction du fuseau horaire.
Si plusieurs systèmes d'exploitation sont installés sur une machine, ils dériveront tous l'heure actuelle de la même horloge matérielle : il est recommandé de la régler sur UTC. Sinon, si l'horloge matérielle est réglée sur
localtime
, plusieurs systèmes d'exploitation peuvent l'ajuster après un changement de l'
heure d'été
par exemple, entraînant ainsi une surcorrection ; des problèmes peuvent également survenir lors d'un voyage entre différents fuseaux horaires et l'utilisation d'un des systèmes d'exploitation pour réinitialiser l'horloge système/matérielle.
L'horloge matérielle peut être interrogée et réglée avec la commande
timedatectl
. 
Vous pouvez consulter l'heure standard actuelle de l'horloge matérielle d'un système Arch en utilisant :
$ timedatectl | grep local
RTC in local TZ: no
Pour changer l'heure standard de l'horloge matérielle en heure locale, utilisez :
# timedatectl set-local-rtc
1
Pour revenir à l'horloge matérielle en UTC, tapez :
# timedatectl set-local-rtc
0
Ceci génère
/etc/adjtime
automatiquement et met à jour le RTC en conséquence ; aucune autre configuration n'est nécessaire.
Pendant le démarrage du noyau, au moment où le pilote RTC est chargé, l'horloge système peut être réglée à partir de l'horloge matérielle. Cela dépend de la plate-forme matérielle, de la version du noyau et des options de construction du noyau. Si cela se produit, à ce moment de la séquence de démarrage, l'heure de l'horloge matérielle est supposée être UTC et la valeur de
/sys/class/rtc/rtc
N
/hctosys
. (N=0,1,2,..) sera fixée à 1.
Plus tard, l'horloge système est à nouveau réglée à partir de l'horloge matérielle par systemd, en fonction des valeurs dans
/etc/adjtime
. Par conséquent, le fait d'avoir l'horloge matérielle utilisant l'heure locale peut provoquer un comportement inattendu pendant la séquence de démarrage ; par exemple l'heure du système qui revient en arrière, ce qui est toujours une mauvaise idée (
il y a bien pire que cela
). Pour éviter cela, systemd
ne se synchronisera en arrière
que si l'horloge matérielle est réglée sur UTC et que le noyau n'est pas informé du fuseau horaire local. Par conséquent, les horodatages sur un système de fichiers FAT touché par le système Linux seront en UTC.
Note
L'utilisation de
timedatectl
nécessite un
D-Bus
actif.  Par conséquent, il peut ne pas être possible d'utiliser cette commande sous un
chroot
(comme lors de l'installation). (comme lors de l'installation).  Dans ces cas, vous pouvez revenir à la commande hwclock, ou utiliser
systemd-nspawn
au lieu de chroot.
Si
/etc/adjtime
n'est pas présent,
systemd
suppose que l'horloge matérielle est réglée sur UTC.
UTC dans Microsoft Windows
Pour
dual boot avec Windows
, il est recommandé de configurer Windows pour utiliser UTC, plutôt que Linux pour utiliser l'heure locale. (Par défaut, Windows utilise l'heure locale
[1]
.)
Cela peut être fait par une simple correction du registre : Ouvrez
regedit
et ajoutez une valeur
DWORD
avec la valeur hexadécimale
1
dans le registre :
HKEY_LOCAL_MACHINE{SYSTEM{CurrentControlSet{Control{TimeZoneInformation{RealTimeIsUniversal
Vous pouvez effectuer cette opération à partir d'une invite de commande d'administrateur :
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
Vous pouvez également créer un fichier
*.reg
(sur le bureau) avec le contenu suivant et le double-cliquer pour l'importer dans le registre :
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001
Si Windows vous demande de mettre à jour l'horloge en raison du changement d'heure, laissez-le faire. Il laissera l'horloge en UTC comme prévu, en corrigeant seulement l'heure affichée.
L'heure de l'
#Horloge matérielle
et de l'
#Horloge système
peut devoir être mise à jour après avoir défini cette valeur.
Si vous avez des problèmes avec le décalage de l'heure, essayez de réinstaller
tzdata
et de régler à nouveau votre fuseau horaire :
# timedatectl set-timezone Europe/Paris
Notes historiques
Pour les
très vieux
Windows, la méthode ci-dessus échoue, à cause de bogues de Windows. Plus précisément,
Pour les versions 64 bits de Windows 7 et les anciennes versions de Windows 10, il existait un bogue qui rendait nécessaire l'utilisation d'une valeur
QWORD
avec une valeur hexadécimale de
1
au lieu d'une valeur
DWORD
. Ce bogue a été corrigé dans les nouvelles versions et maintenant seule la valeur
DWORD
fonctionne.
Avant Vista SP2, il y a un bogue qui remet l'horloge à l'heure locale après la reprise depuis l'état de suspension/hibernation.
Pour XP et les versions antérieures, il y a un bogue lié à l'heure d'été. Consultez
[2]
pour plus de détails.
Pour les versions
encore plus anciennes
de Windows, vous pouvez lire
https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html
- la fonctionnalité n'était même pas documentée ni officiellement prise en charge à l'époque.
Pour ces systèmes d'exploitation, il est recommandé d'utiliser
localtime
.
UTC dans Ubuntu
L'horloge matérielle d'Ubuntu et de ses dérivés est configurée pour être interprétée comme étant en "heure locale" si Windows a été détecté sur un disque quelconque pendant l'installation d'Ubuntu. Ceci est apparemment fait délibérément pour permettre aux nouveaux utilisateurs de Linux d'essayer Ubuntu sur leurs ordinateurs Windows sans modifier le registre.
Pour modifier ce comportement, consultez ci-dessus.
Fuseau horaire
Pour vérifier le fuseau actuel défini pour le système :
$ timedatectl status
Pour lister les zones disponibles :
$ timedatectl list-timezones
Pour définir votre fuseau horaire :
# timedatectl set-timezone
Zone
/
SubZone
Exemple :
# timedatectl set-timezone Canada/Eastern
Cela créera un lien symbolique
/etc/localtime
qui pointe vers un fichier zoneinfo sous
/usr/share/zoneinfo/
. Si vous choisissez de créer le lien manuellement (par exemple pendant
chroot
où
timedatectl
ne fonctionnera pas), gardez à l'esprit que ce doit être un lien symbolique, comme spécifié dans
localtime(5) § DESCRIPTION
:
# ln -sf /usr/share/zoneinfo/
Zone
/
SubZone
/etc/localtime
Astuce
Le fuseau horaire peut également être sélectionné de manière interactive avec
tzselect
.
Consultez
timedatectl(1)
et
localtime(5)
pour plus de détails.
Réglage basé sur la géolocalisation
Note
Certains environnements de bureau prennent en charge la sélection automatique du fuseau horaire (consultez par exemple
GNOME#Date & time
).
Pour définir automatiquement le fuseau horaire en fonction de la localisation de l'adresse IP, on peut utiliser une API de géolocalisation pour récupérer le fuseau horaire, par exemple
curl https://ipapi.co/timezone
, et passer la sortie à
timedatectl set-timezone
pour un réglage automatique. Certaines API géo-IP qui fournissent des services gratuits ou partiellement gratuits sont listées ci-dessous :
API abstraite de géolocalisation IP
FreegeoIP
IP-api
IPAPI
Ipdata
Ipstack
TimezoneApi
[
dead link
2025-08-16—domain name not resolved]
Mise à jour du fuseau horaire à chaque fois que NetworkManager se connecte à un réseau
Créez un script pour le
répartiteur de NetworkManager
:
/etc/NetworkManager/dispatcher.d/09-timezone
#!/bin/sh
case "$2" dans
    up)
        timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)"
    ; ;
esac
Alternativement, l'outil
tzupdate
AUR
définit automatiquement le fuseau horaire en fonction de la géolocalisation de l'adresse IP. Cette
comparaison des API de géolocalisation IP les plus populaires
peut être utile pour décider de l'API à utiliser en production.
Décalage horaire
Chaque horloge a une valeur qui diffère du
temps réel
(dont la meilleure représentation est le
temps atomique international
) ; aucune horloge n'est parfaite.  Une horloge électronique à quartz donne un temps imparfait, mais conserve une imprécision constante. Cette "imprécision" de base est connue sous le nom de "biais temporel" ou "dérive temporelle".
Lorsque l'horloge matérielle est réglée avec
hwclock
, une nouvelle valeur de dérive est calculée en secondes par jour. La valeur de dérive est calculée en utilisant la différence entre la nouvelle valeur réglée et la valeur de l'horloge matérielle juste avant le réglage, en tenant compte de la valeur de la dérive précédente et de la dernière fois que l'horloge matérielle a été réglée. La nouvelle valeur de dérive et le moment où l'horloge a été réglée sont écrits dans le fichier
/etc/adjtime
, écrasant les valeurs précédentes. L'horloge matérielle peut donc être ajustée en fonction de la dérive lorsque la commande
hwclock --adjust
est exécutée ; cela se produit également à l'arrêt mais seulement si le daemon
hwclock
est activé, donc pour les systèmes Arch qui utilisent systemd, cela ne se produit pas.
Note
Si l'horloge matérielle a été réglée à nouveau moins de 24 heures après un réglage précédent, la dérive n'est pas recalculée car
hwclock
considère que la période de temps écoulée est trop courte pour calculer précisément la dérive.
Si l'horloge matérielle continue à perdre ou à gagner du temps par incréments importants, il est possible qu'une dérive invalide ait été enregistrée (mais cela ne s'applique que si le daemon hwclock est en cours d'exécution). Cela peut se produire si vous avez mal réglé l'heure de l'horloge matérielle ou si votre
standard de temps
n'est pas synchronisé avec une installation Windows ou macOS.  La valeur de la dérive peut être supprimée en supprimant d'abord le fichier
/etc/adjtime
, puis en réglant correctement l'heure de l'horloge matérielle et de l'horloge système. Vous devriez ensuite vérifier si votre norme horaire est correcte.
Note
Si vous souhaitez utiliser la valeur de dérive stockée dans
/etc/adjtime
même en utilisant systemd, (par exemple si vous ne pouvez ou ne voulez pas utiliser NTP), vous devez appeler
hwclock --adjust
régulièrement, peut-être en créant une tâche
cron
.
L'horloge logicielle est très précise mais, comme la plupart des horloges, elle n'est pas parfaitement exacte et dérive également. Bien que rarement, l'horloge système peut perdre sa précision si le noyau saute des interruptions. Il existe quelques outils pour améliorer la précision de l'horloge logicielle :
Consultez
#Synchronisation du temps
.
Synchronisation du temps
Le
Network Time Protocol
(NTP) est un protocole permettant de synchroniser les horloges des systèmes informatiques sur des réseaux de données à commutation de paquets et à latence variable. Les implémentations suivantes de NTP sont disponibles pour Arch Linux :
Chrony
— Un client et un serveur itinérants conçus spécifiquement pour les systèmes qui ne sont pas en ligne en permanence.
https://chrony-project.org/
||
chrony
ConnMan
— Un gestionnaire de réseau léger prenant en charge NTP.
https://01.org/connman (waybackmachine)
||
connman
Network Time Protocol daemon
— L'
implémentation de référence
du protocole, dont l'utilisation est particulièrement recommandée sur les serveurs de temps. Il peut également ajuster la fréquence d'interruption et le nombre de ticks par seconde pour diminuer la dérive de l'horloge système, et provoquera la re-synchronisation de l'horloge matérielle toutes les 11 minutes.
https://www.ntp.org/
||
ntp
ntpclient
— Un client NTP simple en ligne de commande.
http://doolittle.icarus.com/ntpclient/
||
ntpclient
AUR
NTPsec
— Un dérivé de NTPd, axé sur la sécurité.
https://ntpsec.org/
||
ntpsec
AUR
OpenNTPD
— Partie du projet OpenBSD et implémente à la fois un client et un serveur.
https://www.openntpd.org/
||
openntpd
sntp
— Un client
SNTP
fourni avec NTPd. Il remplace
ntpdate
et est recommandé dans les environnements sans serveur.
https://www.ntp.org/
||
ntp
systemd-timesyncd
— Un simple daemon
SNTP
qui n'implémente qu'un côté client, se concentrant uniquement sur l'interrogation de l'heure depuis un serveur distant. Il devrait être plus qu'approprié pour la plupart des installations.
https://systemd.io/
||
systemd
Paramètres par utilisateur/session ou temporaires
Pour certaines utilisations, il peut être utile de modifier les paramètres de l'heure sans toucher aux valeurs globales du système. Par exemple, pour tester des applications qui dépendent de l'heure pendant le développement ou pour ajuster le fuseau horaire du système lorsqu'on se connecte à un serveur à distance depuis une autre zone.
Pour qu'une application "voie" une date/heure différente de celle du système, vous pouvez utiliser l'utilitaire
faketime(1)
(de
libfaketime
).
Si vous souhaitez plutôt qu'une application consulte un fuseau horaire différent de celui du système, définissez la
variable d'environnement
TZ
, par exemple :
$ date && export TZ=":/usr/share/zoneinfo/Pacific/Fiji" && date
Tue Nov 1 14:34:51 CET 2016
Wed Nov 2 01:34:51 FJT 2016
C'est différent du simple réglage de l'heure, car cela permet par exemple de tester le comportement d'un programme avec des valeurs de décalage UTC positives ou négatives, ou les effets des changements d'heure d'été lors du développement sur des systèmes dans un fuseau horaire sans heure d'été.
Une autre utilisation est d'avoir des fuseaux horaires différents pour différents utilisateurs du même système : ceci peut être réalisé en définissant la variable
TZ
dans le fichier de configuration du shell, consultez
Environment variables#Defining variables
.
Trucs et astuces
fake-hwc clock
alarm-fake-hwclock
conçu spécialement pour les systèmes sans RTC sauvegardé par batterie, il inclut un service systemd qui, à l'arrêt, sauvegarde l'heure actuelle et, au démarrage, restaure l'heure sauvegardée, évitant ainsi d'étranges erreurs de voyage dans le temps.
Installez
fake-hwclock-git
AUR
,
démarrez
et
activez
fake-hwclock.service
.
Dépannage
L'horloge affiche une valeur qui n'est ni UTC ni l'heure locale
Cela peut être causé par un certain nombre de raisons. Par exemple, si votre horloge matérielle fonctionne à l'heure locale, mais que
timedatectl
est configuré pour supposer qu'elle est en UTC, le résultat serait que le décalage de votre fuseau horaire par rapport à UTC est effectivement appliqué deux fois, ce qui donne des valeurs erronées pour votre heure locale et UTC.
Pour forcer votre horloge à l'heure correcte, et pour écrire également l'UTC correct sur votre horloge matérielle, suivez ces étapes :
Configurez
ntpd
(l'activer en tant que service n'est pas nécessaire).
Réglez correctement votre
fuseau horaire
.
Exécutez
ntpd -qg
pour synchroniser manuellement votre horloge avec le réseau, en ignorant les écarts importants entre l'UTC local et l'UTC du réseau.
Exécutez
hwclock --systohc
pour écrire l'heure UTC logicielle actuelle sur l'horloge matérielle.
Voir aussi
Linux Tips - Linux, Clocks, and Time
Une introduction à la gestion du temps dans les VM Linux
Sources de données sur les fuseaux horaires et l'heure d'été
pour
tzdata
Échelles de temps
Gentoo:System time
Wikipedia:Time