Temps Unix et secondes intercalaires

En ce qui concerne le temps Unix (POSIX), Wikipedia dit:

En raison de sa gestion des secondes intercalaires, il ne s'agit ni d'une représentation linéaire du temps ni d'une représentation réelle de L'UTC.

Mais la commande Unix date ne semble pas les connaître en fait

$ date -d '@867715199' --utc
Mon Jun 30 23:59:59 UTC 1997
$ date -d '@867715200' --utc
Tue Jul  1 00:00:00 UTC 1997

Alors qu'il devrait y avoir une seconde intercalaire à Mon Jun 30 23:59:60 UTC 1997.

Cela signifie-t-il que seule la commande date ignore les secondes intercalaires, alors que le concept du temps Unix ne le fait pas?

23
demandé sur Campa 2013-05-14 13:22:01

2 réponses

Le nombre de secondes par jour sont fixe avec timestamps Unix.

Le nombre de temps Unix est nul à L'époque Unix et augmente de exactement 86400 par jour depuis l'époque.

Il ne peut donc pas représenter les secondes intercalaires. Le système d'exploitation ralentira l'horloge pour s'adapter à cela. Les secondes intercalaires n'existent tout simplement pas en ce qui concerne les horodatages Unix.

18
répondu Thomas Jung 2016-10-25 17:06:08

Le temps Unix est facile à utiliser, mais certains horodatages ne sont pas des temps réels, et certains horodatages ne sont pas des temps uniques.

C'est-à-dire qu'il y a des horodatages en double représentant deux secondes différentes dans le temps, car en temps unix, la soixantième seconde peut devoir se répéter (car il ne peut pas y avoir de soixante et unième seconde). Théoriquement, ils pourraient aussi être des lacunes à l'avenir parce que la soixantième seconde ne doit pas exister, bien qu'aucune seconde bissextile n'ait été émise loin.

Justification du temps unix: il est défini de manière à ce qu'il soit facile de travailler avec. L'ajout de la prise en charge des secondes intercalaires aux bibliothèques standard est très délicat. Par exemple, vous voulez représenter le 1er janvier 2050 dans une base de données. Personne sur terre ne sait combien de secondes cette date est en UTC! La date ne peut pas être stockée en tant qu'horodatage UTC, car L'UAI ne sait pas combien de secondes intercalaires nous devrons ajouter dans les prochaines décennies (elles sont aussi bonnes que aléatoires). Alors comment un programmeur faire des opérations arithmétiques à quand la durée qui s'écoulera entre deux dates à l'avenir n'est pas connue avant un an ou deux auparavant? Le temps Unix est simple: nous connaissons déjà l'horodatage du 1er janvier 2050 (à savoir, 80 ans * #de secondes par an). UTC est extrêmement difficile à travailler toute l'année, alors que le temps unix est seulement difficile à travailler avec l'instant où une seconde bissextile se produit.

Pour ce que ça vaut, Je n'ai jamais rencontré de programmeur qui soit d'accord avec les secondes intercalaires. Ils devraient clairement être abolis.

18
répondu Nicholas Wilson 2013-05-14 13:36:24