Idées fausses des programmeurs sur le temps Unix

Je m'excuse auprès de Patrick Mackenzie .

Hier, Danny s'est renseigné sur des faits curieux sur le temps Unix, et je me suis rappelé que parfois cela ne fonctionne pas du tout de manière intuitive.

Ces trois faits semblent être extrêmement raisonnables et logiques, non?

  1. L'heure Unix est le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC.
  2. Si vous attendez exactement une seconde, le temps Unix changera exactement d'une seconde.
  3. Le temps Unix ne recule jamais.

Tout cela n'est pas vrai.

Mais il ne suffit pas de dire "Tout cela est faux" sans expliquer pourquoi . Voir ci-dessous pour une explication. Mais si vous voulez penser par vous-même, ne faites pas défiler l'horloge!


Horloge de table des années 1770. Compilé par John Leroux. De la collection Wellcome . Publié sous CC BY

Les trois erreurs ont une raison: les secondes intercalaires . Si vous n'êtes pas familier avec les secondes supplémentaires, voici une référence rapide:

Le temps UTC est déterminé par deux facteurs:

  • Heure atomique internationale : Lectures moyennes de centaines d'horloges atomiques à travers le monde. Nous pouvons mesurer une seconde par les propriétés électromagnétiques d'un atome, et c'est la mesure du temps la plus précise connue de la science.
  • Temps universel , basé sur la rotation de la Terre autour de son propre axe. Un tour complet - un jour.

Le problème est que ces deux nombres ne coïncident pas toujours. La rotation de la Terre n'est pas cohérente - elle ralentit progressivement, de sorte que la journée en temps universel s'allonge. D'un autre côté, les horloges atomiques sont diaboliquement précises et constantes pendant des millions d'années.

Lorsque deux fois tombent hors de la synchronisation, une seconde est ajoutée ou supprimée en UTC pour restaurer la synchronisation. Depuis 1972, le service IERS (qui gère cette affaire) a ajouté 27 secondes supplémentaires. Le résultat a été 27 jours UTC d'une durée de 86 401 secondes. Théoriquement, l'apparition d'une journée d'une durée de 86 399 secondes (moins un) est possible. Les deux options contredisent l'hypothèse fondamentale du temps Unix.

Le temps Unix suppose que chaque jour dure exactement 86 400 secondes (60 × 60 × 24 = 86 400), sans secondes supplémentaires. Si un tel saut se produit, le temps Unix saute après une seconde ou en comptant deux secondes en une. En 2019, il manque 27 secondes intercalaires.

Nos erreurs doivent donc être complétées comme suit:

  • Le temps Unix est le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC moins les secondes intercalaires .
  • Si vous attendez exactement une seconde, le temps Unix changera exactement d'une seconde si la seconde supplémentaire n'a pas été supprimée .

    Jusqu'à présent, en pratique, les secondes n'ont jamais été supprimées (et un ralentissement de la rotation de la Terre signifie que cela est peu probable), mais si cela arrivait, cela signifierait que le jour UTC était d'une seconde plus court. Dans ce cas, la dernière seconde de l'UTC (23:59:59) est rejetée.

    Chaque jour Unix a le même nombre de secondes, donc la dernière seconde Unix d'un jour écourté ne correspondra à aucune heure UTC. Voici à quoi cela ressemble à des intervalles d'un quart de seconde:



    Si vous commencez à 23: 59: 58: 00 UTC et attendez une seconde, l'heure Unix avancera de deux secondes UTC et l'horodatage Unix 101 ne sera attribué à personne.
  • Le temps Unix ne peut jamais revenir en arrière jusqu'à ce qu'une seconde supplémentaire soit ajoutée .

    Cela s'est déjà produit 27 fois dans la pratique. À la fin de la journée UTC, ajoutez une seconde supplémentaire 23:59:60. Les jours Unix ont le même nombre de secondes, il ne peut donc pas ajouter une seconde supplémentaire - à la place, vous devez répéter les horodatages Unix pour la dernière seconde. Voici à quoi cela ressemble à des intervalles d'un quart de seconde:



    Si vous commencez à 23: 59: 60.50 et attendez une demi-seconde, l'heure Unix renvoie une demi-seconde et l'horodatage Unix 101 correspond à deux secondes UTC.

Ce ne sont probablement pas les seules bizarreries du temps Unix - juste ce dont je me suis souvenu hier.

Le temps est une chose très étrange.

Source: https://habr.com/ru/post/fr452584/


All Articles