Temps Unix et écriture ISO 8601
Unité hors SI · grandeur : un instant exprimé en nombre entier de secondes depuis 1970
Le dix-neuf janvier 2038, à trois heures quatorze minutes et sept secondes de temps universel, un compteur de secondes large de trente-deux bits atteindra 2 147 483 647 — le plus grand nombre qu'il soit capable de contenir. Le tic suivant lèvera le bit de poids fort, et le même mot binaire se lira désormais comme négatif : les horloges qui tiennent le temps par ce compte précis se retrouveront non pas en 2038, mais en décembre 1901. Ce n'est pas là une curiosité d'un avenir lointain — un automate industriel ou un compteur d'eau sert plus longtemps que les douze années qui restent.
Le compte est bâti on ne peut plus simplement : les secondes se suivent depuis minuit le premier janvier 1970, et un jour y contient toujours exactement 86 400 secondes. C'est cette simplicité même qui est la source de ses deux particularités. D'un côté, la date du calendrier découle du nombre à l'instant et réciproquement, si bien que tout journal d'événements, toute base de données et tout système de fichiers tiennent le temps par lui. De l'autre, une seconde intercalaire ne peut aucunement s'exprimer dans un tel compte, ce qui signifie que, malgré son nom, il ne numérote pas des secondes mais des jours avec leurs fractions, et qu'il est en vérité une fonction linéaire de l'écriture UTC plutôt qu'un compteur du temps écoulé.
01 · Définition
Le temps Unix est le nombre de secondes écoulées depuis minuit le premier janvier 1970 en temps universel coordonné, à supposer que chaque jour tienne exactement 86 400 secondes. L'écriture ISO 8601 énonce la même chose autrement : par la date du calendrier, l'heure et l'indication du décalage par rapport au méridien d'origine, les champs allant strictement du grossier au fin.
La réserve des 86 400 secondes n'est pas un détail, mais ce qu'il y a de plus essentiel dans la définition. Une seconde intercalaire, annoncée par le service de la rotation terrestre, le compte ne saurait l'accueillir, et c'est pourquoi, à l'instant de l'insertion, le système répète deux fois une seule et même valeur ou recule l'horloge. Il en découle une chose importante : la différence de deux nombres unix n'est pas le nombre de secondes réellement écoulées entre deux événements si une insertion est tombée entre eux — l'écart avec l'échelle atomique s'est déjà accumulé jusqu'à vingt-sept secondes.
La limite, en revanche, ne dépend pas de la définition mais de la largeur du stockage. Trente-deux bits avec signe donnent pour plus grande valeur 2 147 483 647, qui tombe le dix-neuf janvier 2038 ; l'incrément suivant met le bit de poids fort à un et rend le nombre négatif, rejetant l'horloge au treize décembre 1901. Soixante-quatre bits repoussent la frontière de deux cent quatre-vingt-douze milliards d'années, mais les nanosecondes entières dans ces mêmes soixante-quatre bits s'épuisent dès 2262.
L'écriture selon la norme résout une autre tâche — l'échange plutôt que le stockage — et c'est pourquoi y comptent des choses que le nombre n'a pas du tout : le décalage horaire, le séparateur entre la date et l'heure, et la règle voulant qu'à longueur de chaîne égale l'ordre lexicographique coïncide avec l'ordre chronologique. C'est cette dernière propriété qui a fait du format le fondement du tri dans les noms de fichiers et les journaux.
Menez le temps par le curseur et regardez le registre se remplir : les bits s'allument de droite à gauche, et tant que le plus haut, celui du signe, demeure sombre, le nombre est positif et la date croît. Dès que le compteur franchit 2 147 483 647, le bit de poids fort s'embrase en rouge, le nombre entier devient négatif et l'horloge saute en 1901.
La droite verte est l'échelle atomique, où chaque seconde est vraiment une seconde. La ligne rouge en escalier est le temps Unix, qui à chaque insertion délivre deux fois un seul et même horodatage, de sorte que la ligne s'arrête sur place. L'écart atteint déjà vingt-sept secondes et croît, et c'est pourquoi le compte convient à une date du calendrier, mais non à la mesure des durées en physique.
02 · Conversion
Saisissez un horodatage ou une date
Entre tous les multiples du compte — secondes, millisecondes, micro- et nanosecondes — les conversions sont exactes, puisqu'ils ne diffèrent que par un facteur. Une seule ligne est approchée : la conversion vers l'échelle atomique exige de savoir combien de secondes intercalaires se sont accumulées jusqu'à l'instant donné.
L'analyse d'une chaîne normalisée, la fiche la fait dans l'écriture étendue avec la lettre Z ; la forme de base sans séparateurs est reportée dans les réglages fins.
Le problème de l'an 2038 ne tient pas à la norme, mais au matériel et au vieux code : des horodatages de trente-deux bits siègent dans le micrologiciel des compteurs, dans les automates industriels, dans les formats de systèmes de fichiers et dans les bases de données où le champ est déjà déclaré sur quatre octets. Changer le type dans les sources est assez facile ; passer en revue des millions d'appareils installés dans les douze années qui restent est une tâche du même ordre que celle qui se posait avant l'an 2000.
| Valeur | Remarque | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Ordres de grandeur
échelle logarithmique : de la seconde à la limite des soixante-quatre bits04 · Instruments de mesure
Avec quoi l'on horodate un événement
Une puce à part, munie d'une pile, qui tient le compte tant que l'appareil est éteint. Elle ne conserve d'ordinaire pas un horodatage unix, mais les champs du calendrier séparément, et la largeur de son champ d'année lui est propre, si bien que sur les vieilles cartes la conversation sur 2038 commence par la question de savoir jusqu'à quelle année la puce elle-même compte.
Le protocole NTP amène l'horloge d'une machine au temps commun à quelques millisecondes près, et il avertit aussi d'une insertion par un fanion particulier un jour à l'avance. Il a lui aussi sa propre frontière, et elle vient plus tôt : le compte court depuis 1900 sur trente-deux bits non signés et débordera en février 2036.
Dans un journal, l'horodatage s'écrit soit en nombre, soit en chaîne selon la norme, et la seconde manière est préférable pour une seule raison : à longueur égale, l'ordre alphabétique des chaînes coïncide avec l'ordre chronologique, de sorte que les entrées se trient sans analyser la date. C'est précisément pourquoi le format s'est répandu bien au-delà de l'informatique.
On ne peut éprouver l'aptitude d'un appareil à l'an 2038 que d'une seule manière : avancer son horloge au-delà de la frontière fatidique et voir ce qu'il advient des journaux, des certificats et du calcul des intervalles. On a déjà trouvé ainsi des défaillances dans la facturation, dans les systèmes de contrôle d'accès et dans les durées de validité des clés, où une date future se forme par addition et déborde bien avant la frontière elle-même.
05 · Règles d’écriture
Du grossier au fin, et toujours avec le décalage
La norme exige l'ordre décroissant des champs, quatre chiffres pour l'année, le trait d'union comme séparateur de date et la lettre T devant l'heure ; le décalage horaire s'indique soit par la lettre Z pour le méridien d'origine, soit en plus-moins heures et minutes. L'horodatage unix s'écrit en nombre entier sans séparateur de milliers, et le multiple doit toujours être précisé, puisqu'un facteur mille sépare les secondes des millisecondes et qu'à la taille du nombre on les confond aisément.
La première écriture se lit différemment selon les pays et se trouve donc inadmissible dans l'échange de données. La deuxième omet à la fois le séparateur et le décalage, en sorte que l'instant demeure indéterminé d'un jour de part et d'autre. La troisième perd les zéros de tête, si bien que les chaînes cessent de se trier alphabétiquement — et c'est justement pour cette propriété que le format est prisé. La quatrième met un signe d'égalité entre le compte unix et l'échelle atomique, alors que vingt-sept secondes d'insertions accumulées les séparent.
06 · Unités voisines
À côté se tiennent tous les comptes bâtis sur le même principe, mais depuis un autre début : le temps NTP depuis 1900, la date julienne depuis midi de l'an 4713 avant notre ère, l'échelle du système satellitaire depuis janvier 1980. Ils ne diffèrent que par l'époque et l'unité, et se convertissent donc en retranchant une constante.
secondes signées
sa limite tombe dès 2036
secondes intercalaires comptées honnêtement
Parmi les fiches de Simetrium se trouvent à côté la date julienne, d'où vient la constante de conversion, les échelles UTC, TAI et UT1, qui expliquent les secondes intercalaires disparues, seconde comme unité du compte, et le bit, dont la largeur fixe la limite.
07 · Section historique
Une époque choisie par manque de bits
Dans le premier manuel d'Unix, le temps se comptait en soixantièmes de seconde depuis le début de 1971, et sur trente-deux bits un tel compte ne tenait qu'un bon deux ans. Ils s'épuisaient si vite qu'il aurait fallu déplacer l'époque à chaque édition du système, et l'on renonça aux fractions de seconde au profit des entières.
En passant aux secondes entières, les concepteurs gagnèrent une réserve de cent trente-six ans et purent choisir le début par commodité plutôt que par nécessité. On prit le premier janvier 1970 — la date ronde la plus proche dans le passé, jusqu'où les enregistrements machine n'allaient de toute façon pas — et on ne l'a plus changée une seule fois depuis, quoique le système ait été réécrit de fond en comble plus d'une fois.
L'Organisation internationale de normalisation ramena à un seul les formats nationaux divergents et lui donna pour fondement une règle simple : les champs vont du grossier au fin, tous avec des zéros de tête. L'effet second se révéla plus important que l'intention — de telles chaînes se trient comme des nombres, et le format se répandit dans les noms de fichiers, les journaux et les protocoles d'échange.
Les systèmes de bureau et de serveur sont passés depuis longtemps à soixante-quatre bits, et là la frontière est repoussée au-delà de tout horizon raisonnable. Le danger est demeuré ailleurs : dans le micrologiciel d'instruments dont la durée de service atteint vingt ans, dans les formats de fichiers où le champ est déclaré sur quatre octets, et dans les calculs d'échéances futures, qui débordent dès aujourd'hui pour peu qu'on ajoute quinze ans à la date présente.
Un compte qui, malgré son nom, ne compte pas les secondes
La définition du temps Unix sonne comme un compte de secondes, mais l'exigence de 86 400 secondes rondes par jour en fait tout autre chose : une fonction linéaire de l'écriture UTC et non une mesure du temps écoulé. Chaque fois que le service de la rotation terrestre annonce une insertion, le compte doit répéter deux fois une seule et même valeur ou sauter en arrière, et la différence de deux horodatages perd cette seconde même. En un demi-siècle, vingt-sept pertes de ce genre se sont accumulées, et c'est pourquoi, dans les tâches qui réclament une durée véritable, on prend l'échelle atomique et non celle-ci.
La seconde particularité ne tient pas du tout à la définition, mais à la manière du stockage, et cela en fait la seule limite de notre catalogue qui ne soit fixée ni par la nature ni par une convention, mais par la largeur d'un mot machine. La date julienne ne finit jamais, parce qu'elle est un nombre ; le temps Unix finit le dix-neuf janvier 2038, parce qu'il est un champ de quatre octets. La différence entre une grandeur et sa représentation occupe d'ordinaire peu les métrologues, et ici c'est justement elle qui décide de tout.
Catalogue · unités de mesure
Une fiche pour chaque grandeur
Sept unités de base du SI, vingt-deux dérivées portant un nom propre, et des grandeurs hors système sans lesquelles ni la technique ni le calendrier ne fonctionneraient.