Pourquoi Unix a-t-il son propre concept du temps? Quelle est l’époque et quel est le problème du 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. Il est tellement répandu que vous l'utilisez probablement sans en avoir conscience. 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 un décompte du nombre total de secondes depuis une heure et une date fixes. Il s'agit d'un format de date / heure (ou horodatage) 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 les 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 du tout si grande. 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, de sorte que 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 présente encore des 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 nombre total de secondes depuis un moment donné. Mais quel est ce moment? Son 00:00:00 UTC sur 1er janvier 1970. C'est ce que l'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 semble 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 sans valeur, il se traduira souvent par 0 et donnera la date exacte de l’époque.
Le format de données temporelles Unix
À proprement parler, il n’y en a pas. 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, c'est-à-dire 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) affectait les systèmes informatiques qui stockaient les années sous forme de valeurs à deux chiffres. Lorsque l'an 2000 est arrivé, de tels systèmes l'ont traité comme s'il s'agissait de 1900. En fait, cela n’a pas été aussi catastrophique qu’on le craignait, principalement parce que de nombreuses personnes ont consacré beaucoup de temps et d’efforts à l’avance à se préparer.
Dans son passé chargé d'histoire, le codage a également entraîné la destruction. Les instances d'un petit peu de mauvais code ont causé un désastre à un niveau majeur. Voici 10 des pires erreurs de programmation de l'histoire.
Si vous étiez attentif dans la section précédente, vous avez peut-être 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. (On parle souvent de problème, pas de bogue; peut-être sommes-nous devenus plus optimistes depuis l’an 2000!) Lorsque 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 échoueront tout simplement.
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 Convertisseur d'époque site 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 une convertisseur d'horodatage. Il est plus basique, mais a une présentation très propre et est facile à utiliser.
Le temps est 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.
Sous Linux et macOS, le Date programme 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
10 février 12:28:30 GMT 2021
Si vous avez besoin de la date / heure actuelle sous Unix, utilisez le +% s argument:
$ date +% s
1612960114
Vous pouvez convertir une date lisible par l'homme en un horodatage à l'aide de la -ré signaler si votre version de Date le soutient. La plupart des versions de Linux devraient, par défaut:
$ date -d "2 janvier 1970" +% s
82800
Sur macOS, Date est un programme différent, qui nécessite un ensemble différent d'indicateurs:
$ date -j -f "% b% d% Y% T" "2 janvier 1970 00:00:00" "+% s"
82800
En allant dans l'autre sens, vous pouvez convertir à partir d'un horodatage Unix en utilisant le -r drapeau:
$ date -r 1600000000
13 sept. 2020 13:26:40 CEST
Certains autres programmes utilisent le % s format pour gérer l'heure Unix. Par exemple, si vous souhaitez afficher la date de modification d'un fichier à l'heure Unix, avec le Version Linux de ls, vous pouvez utiliser les éléments suivants:
$ 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 le temps() fonction qui renvoie l'horodatage Unix actuel. Son Date() La fonction prend un horodatage comme deuxième argument:
$ php -r 'date d'écho ("Y-m-d", heure ());'
2021-02-11
JavaScript aborde les choses de manière intéressante. Il a un Date.now () méthode 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 du décalage horaire. 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 essentiels tels que ls, consultez notre guide des commandes Linux de base.
Vous voulez vous familiariser avec Linux? Commencez par ces commandes Linux de base pour apprendre les tâches informatiques standard.
- Non spécifié
Bobby est un passionné de technologie qui a travaillé comme développeur de logiciels pendant la majeure partie de deux décennies. Passionné de jeux vidéo, il travaille en tant que rédacteur de critiques chez Switch Player Magazine et est plongé dans tous les aspects de la publication en ligne et du développement Web.
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives!
Un pas de plus…!
Veuillez confirmer votre adresse e-mail dans l'e-mail que nous venons de vous envoyer.