Qu’est-ce que l’heure Unix et quand était l’époque Unix?

Pourquoi Unix a-t-il son propre concept du temps? Quelle est l'époque et quel est le problème Y2038?

L'heure Unix est un moyen de représenter une date et une heure spécifiques, utilisées par Linux, macOS et de nombreux autres systèmes interopérables. C'est tellement répandu que vous l'utilisez probablement sans vous en rendre compte. Une fois que vous aurez compris le temps Unix, vous le repérerez dans de nombreux contextes. Plusieurs outils peuvent vous aider à travailler avec l'heure Unix.

Quel est le but de l'heure Unix?

L'heure Unix est le nombre total de secondes depuis une heure et une date fixes. C'est un format de date / heure (ou horodatage) qui semble différent des dates et heures lisibles par l'homme auxquelles nous sommes habitués. Ceci est purement pour des raisons d'efficacité. Il faut beaucoup moins d'espace pour stocker un seul nombre représentant des secondes que pour stocker des valeurs séparées pour l'année, le mois, l'heure, etc.

Bien sûr, en termes modernes, la différence d'espace n'est pas si grande du tout. Mais considérez qu'Unix est né à la fin des années 1960 lorsque le stockage disponible était beaucoup plus petit. Les horodatages sont également beaucoup utilisés, donc leur stockage s'additionne. Par exemple, chaque fichier est associé à trois horodatages.

Le format est quasiment impossible à traduire dans votre tête à moins que vous ne soyez un génie mathématique. Mais il a encore quelques avantages par rapport à des alternatives plus lisibles telles que mer, 21 octobre 2015 07:28:00 GMT . Vous pouvez commander deux horodatages Unix très facilement, en un coup d'œil. Il est également généralement plus rapide de déterminer la différence entre deux horodatages. Cela est particulièrement vrai pour les dates rapprochées, comme les jours adjacents.

À propos de l'époque

Ainsi, l'heure Unix est un décompte total de secondes depuis un moment donné. Mais quel est ce moment? Il est 00:00:00 UTC le 1er janvier 1970 . C'est ce qu'on appelle souvent l'époque Unix. Les programmeurs ont choisi cette date pour l'époque par commodité, car c'était la date du tour le plus proche lorsqu'ils ont inventé l'heure Unix.

Vous avez peut-être vu cette date lorsque quelque chose ne va pas. C'est clairement un bug, mais qui a l'air très étrange quand il en résulte une date antérieure à la naissance de beaucoup d'entre nous! C'est tout à fait compréhensible, cependant, quand vous connaissez l'heure Unix. Si un système tente d'afficher un horodatage qui n'a aucune valeur, il se traduira souvent par 0 et aboutira à la date exacte de l'époque.

Le format de données temporelles Unix

Il n'y en a pas à proprement parler. Le type de données d'origine était un entier 32 bits, et cela reste souvent le cas, même dans des systèmes beaucoup plus puissants.

Ce type de données permet à la valeur de stocker un total de 2 ^ 32 secondes, soit un peu plus de 136 ans. Cette valeur est généralement signée, ce qui signifie qu'elle peut être négative ou positive. Ainsi, cela représente généralement 68 ans de part et d'autre de l'époque soit 1902-2038.

Il s'agit bien entendu d'une période limitée. Mais l'utilisation principale du format d'horodatage était pour des concepts tels que la modification de fichier. Le besoin était vraiment de représenter le temps proche du présent, plutôt que de l'histoire ancienne ou loin dans le futur. Même pour des applications telles que les calendriers, il est rarement nécessaire de représenter des dates plus de quelques décennies dans le futur.

Mais cela ne veut pas dire que cette durée limitée est sans problème…

Le problème de l'année 2038

Le bogue de l'an 2000 (l' une des pires erreurs de programmation de l'histoire ) a affecté les systèmes informatiques qui stockaient des années sous forme de valeurs à deux chiffres. Lorsque l'an 2000 est arrivé, de tels systèmes l'ont traité comme s'il était 1900. En fait, ce n'était pas aussi catastrophique qu'on le craignait, principalement parce que beaucoup de gens ont passé beaucoup de temps et d'efforts à l'avance à s'y préparer.

Si vous étiez attentif dans la section précédente, vous pourriez avoir repéré un problème similaire qui pourrait affecter l'heure Unix. Eh bien, l'heure Unix a son propre problème de données: le problème Y2k38. (C'est souvent considéré comme un problème, pas un bogue; peut-être que nous sommes devenus plus optimistes depuis l'an 2000!) Quand le temps Unix s'épuise littéralement en 2038, les systèmes traiteront les nouvelles dates comme 1902 ou 1970. Ou peut-être qu'ils ' Je vais tout simplement échouer.

Au moins, ce problème ne nous touchera pas au coup de minuit le soir du Nouvel An. La dernière seconde de l'heure Unix 32 bits tombera le 19 mars. Dans l'éventualité, nous mettrons probablement à niveau la plupart des systèmes d'ici 2038 ou ils seront de toute façon obsolètes d'ici là.

Quelques ressources d'horodatage utiles

Le site Epoch Converter est probablement le convertisseur d'horodatage le plus complet disponible. Il commence par afficher l'heure Unix actuelle – en temps réel – et ajoute presque toutes les fonctionnalités imaginables en plus de cela. Son utilisation principale est la conversion entre les horodatages et les dates lisibles par l'homme, dans les deux sens.

Dan's Tools est une vaste collection d'applications Web utiles, dont l'un est un convertisseur d'horodatage . C'est plus basique, mais a une présentation très propre et est facile à utiliser.

Time.is présente un autre look encore plus minimaliste. Il affiche l'heure dans un certain nombre de formats, y compris l'heure Unix. Il inclut l'heure actuelle dans son titre de page, ce qui est utile.

Utilisation de l'heure Unix avec les outils de ligne de commande

Sous Linux et macOS, le programme de date est l'utilitaire principal pour traiter la date / l'heure, y compris les horodatages Unix. Appelé sans aucun argument, il renvoie la date / heure actuelle dans un format lisible par l'homme:

 $ date
Wed Feb 10 12:28:30 GMT 2021

Si vous avez besoin de la date / heure actuelle à l'heure Unix, utilisez l'argument +% s :

 $ date +%s
1612960114

Vous pouvez convertir une date lisible par l'homme en un horodatage à l'aide de l'indicateur -d si votre version de date le prend en charge. La plupart des versions de Linux devraient, par défaut:

 $ date -d "Jan 2 1970" +%s
82800

Sous macOS, la date est un programme différent, qui nécessite un ensemble d'indicateurs différent:

 $ date -j -f "%b %d %Y %T" "Jan 02 1970 00:00:00" "+%s"
82800

Dans l'autre sens, vous pouvez effectuer une conversion à partir d'un horodatage Unix en utilisant l'indicateur -r :

 $ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Certains autres programmes utilisent le format % s pour gérer l'heure Unix. Par exemple, si vous souhaitez afficher la date de modification d'un fichier à l'heure Unix, avec la version Linux de ls , vous pouvez utiliser ce qui suit:

 $ ls -l --time-style=+%s index.tmp.html
-rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

Comment utiliser l'heure Unix dans les langages de programmation

PHP a la fonction time () qui renvoie l'horodatage Unix actuel. Sa fonction date () prend un horodatage comme deuxième argument:

 $ php -r 'echo date("Ymd", time());'
2021-02-11

JavaScript aborde les choses de manière intéressante. Il a une méthode Date.now () pour obtenir le nombre de millisecondes depuis l'époque Unix. Bien sûr, vous pouvez diviser cela par 1000 et arrondir le résultat pour donner le temps Unix équivalent en secondes:

 > Math.floor(Date.now() / 1000)
1613083012

Comprendre l'heure Unix

L'heure Unix est un concept simple qui apparaît dans de nombreux endroits. Une fois que vous l'aurez compris, vous pourriez le trouver très utile, par exemple lors du calcul des décalages horaires. Vous pouvez également reconnaître quand cela peut être la cause de certains bogues.

Des concepts tels que l'époque et les horodatages sont une partie importante de la mise en route de Linux. Pour en savoir plus sur les éléments essentiels tels que les ls , consultez notre guide des commandes Linux de base.