Pourquoi les dates sont-elles calculées à partir du 1er janvier 1970?

95

Y a-t-il une raison d'utiliser la date (1er janvier 1970) comme norme par défaut pour la manipulation de l'heure? J'ai vu ce standard en Java ainsi qu'en Python. Je connais ces deux langues. Existe-t-il d'autres langues populaires qui suivent la même norme?

Décrivez s'il vous plait.

Vijay Shanker Dubey
la source
1
Un autre langage populaire suivant le même standard est PHP, c'est un point de départ assez courant.
Greg K

Réponses:

65

C'est la norme du temps Unix.

L'heure Unix, ou heure POSIX, est un système de description des points dans le temps, défini comme le nombre de secondes écoulées depuis le temps universel coordonné proleptique (UTC) du 1er janvier 1970 à minuit, sans compter les secondes intercalaires.

soldat.moth
la source
5
Savez-vous si Kernighan et Thompson ont chacun exprimé une raison de choisir ce moment au-delà de "C'est un nombre rond un peu avant que nous commencions à construire la chose."?
dmckee --- ex-moderator chaton
C'est le début d'une année, c'est dans le fuseau horaire zéro (Zulu). Ces deux éléments simplifient le code de formatage de la date.
Donal Fellows
28
Ne compte pas les secondes intercalaires? Je ne connaissais pas ce détail. Après y avoir réfléchi pendant quelques instants, je peux voir pourquoi tu ferais ça de cette façon, mais mec. mon monde est brisé. de 24 secondes.
keturn
69

en utilisant la date (1er janvier 1970) comme standard par défaut

La question fait deux fausses hypothèses:

  • Tout le suivi du temps en informatique est effectué comme un décompte depuis 1970.
  • Un tel suivi est standard.

Deux douzaines d'époques

Le temps en informatique n'est pas toujours suivi depuis le début de 1970 UTC . Bien que cette référence d'époque soit populaire, divers environnements informatiques au cours des décennies ont utilisé au moins près de deux douzaines d'époques . Certains sont d'autres siècles. Ils vont de l'année 0 (zéro) à 2001.

Voici quelques-uns.

0 janvier 1 avant JC

1 janvier AD 1

15 octobre 1582

1 janvier 1601

31 décembre 1840

17 novembre 1858

30 décembre 1899

31 décembre 1899

1 janvier 1900

1 janvier 1904

31 décembre 1967

1 janvier 1980

6 janvier 1980

1 janvier 2000

1 janvier 2001

Epoque Unix commune, mais pas dominante

Le début de 1970 est populaire, probablement en raison de son utilisation par Unix. Mais ce n'est en aucun cas dominant. Par exemple:

  • D'innombrables millions (milliards?) De documents Microsoft Excel et Lotus 1-2-3 utilisent January 0, 1900(31 décembre 1899).
  • Le monde a maintenant plus d' un milliard des appareils iOS / OS X à l' aide de l' époque Cocoa (NSDate) de 1 January 2001, GMT.
  • Le système de navigation par satellite GPS utilise January 6, 1980alors que l'alternative européenne Galileo utilise 22 August 1999.

ISO 8601

En supposant qu'un compte depuis l'époque utilise l'époque Unix, cela ouvre une grande vulnérabilité aux bogues. Un tel décompte est impossible pour un humain à déchiffrer instantanément, donc les erreurs ou les problèmes ne seront pas facilement signalés lors du débogage et de la journalisation. Un autre problème est l'ambiguïté de la granularité expliquée ci-dessous.

Je suggère fortement à la place de sérialiser les valeurs date-heure sous forme de chaînes ISO 8601 non ambiguës pour l'échange de données plutôt que d'un nombre entier depuis l'époque: YYYY-MM-DDTHH:MM:SS.SSSZcomme 2014-10-14T16:32:41.018Z.

Compte de quoi depuis l'époque

Un autre problème avec le suivi temporel du décompte depuis l'époque est l'unité de temps, avec au moins quatre niveaux de résolution couramment utilisés.

  • Secondes
    Les installations Unix d'origine utilisaient des secondes entières, conduisant au problème de l' année 2038 lorsque nous atteignons la limite des secondes depuis 1970 si elles sont stockées sous forme d'entier 32 bits.
  • Millisecondes
    Utilisé par les anciennes bibliothèques Java, y compris la classe java.util.Date et la bibliothèque Joda-Time .
  • Microsecondes
    Utilisé par les bases de données telles que Postgres .
  • Nanosecondes
    Utilisé par le nouveau package java.time dans Java 8.

Diagramme montrant différents logiciels comptant de l'époque en secondes, millisecondes, microsecondes ou nanosecondes.

Basil Bourque
la source
1
Je me demande quelle est l'époque dominante en ce moment ... l'avez-vous basée sur des données?
PascalVKooten
1
@PascalVKooten De nombreuses époques différentes sont utilisées dans de nombreux environnements et systèmes logiciels différents. Il n'y a donc pas une seule époque dominante. Mon propos ici est de ne jamais assumer l'époque. Connaissez votre source de données. La meilleure approche est pour une source de données d'éviter complètement le problème d'époque et d'utiliser simplement les chaînes ISO 8601, à mon humble avis.
Basil Bourque
1
Merci pour votre réponse. Je comprends qu'il y en a beaucoup, mais je suis curieux de savoir si, par exemple, POSIX est devenu plus populaire avec le temps.
PascalVKooten
7

pourquoi c'est toujours le 1er janvier 1970, Parce que - «1er janvier 1970», généralement appelé «date d'époque», est la date à laquelle l'heure a commencé pour les ordinateurs Unix, et cet horodatage est marqué comme «0». Tout moment depuis cette date est calculé en fonction du nombre de secondes écoulées. En termes plus simples ... l'horodatage de n'importe quelle date sera la différence en secondes entre cette date et le `` 1er janvier 1970 ''. par '1' à chaque seconde passe Pour la conversion des horodatages UNIX en dates lisibles, PHP et d'autres langages open source fournissent des fonctions intégrées.

Friyank
la source
5

Y a-t-il une raison d'utiliser la date (1er janvier 1970) comme norme pour la manipulation de l'heure?

Aucune raison qui compte.

Le timemodule de Python est la bibliothèque C. Demandez à Ken Thompson pourquoi il a choisi cette date pour une date historique. C'était peut-être l'anniversaire de quelqu'un.

Excel utilise deux époques différentes. Une raison pour laquelle différentes versions d'Excel utilisent des dates différentes?

À part le programmeur réel, personne d'autre ne saura jamais pourquoi ce genre de décisions a été prise.

Et...

Peu importe la raison pour laquelle la date a été choisie. C'était juste.

Les astronomes utilisent leur propre date d'époque: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Pourquoi? Une date doit être choisie pour faire travailler les mathématiques. Toute date aléatoire fonctionnera.

Une date loin dans le passé évite les nombres négatifs pour le cas général.

Certains des packages les plus intelligents utilisent l'année proleptique grégorienne 1. Une raison pour laquelle l'année 1?
Il y a une raison donnée dans des livres comme les calculs calendaires: c'est mathématiquement un peu plus simple.

Mais si vous y réfléchissez bien, la différence entre 1/1/1 et 1/1/1970 n'est que de 1969, un décalage mathématique trivial.

S.Lott
la source
1
Si 1/1/1 avait été choisi, nous n'aurions plus de secondes (2 ^ 31). Dans l'état actuel des choses, nous sommes confrontés à un problème similaire à celui de l'an 2000 en 2038 pour les systèmes d'exploitation 32 bits. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava
1
@Chris Nava: Les gens qui utilisent 1/1/1 des jours, pas des secondes. 2 milliards de jours, c'est environ 5 millions d'années. Souvent, ils conservent une paire (jour, heure) pour maximiser la résolution temporelle; la plupart des jours, il n'y a que 86400 secondes.
S.Lott
@ S.Lott: Oui. Je faisais juste remarquer que puisque la plupart des logiciels comptent des secondes (pas des minutes) depuis l'époque, 1/1/1 était trop loin dans le passé pour être une date de début raisonnable. Par conséquent, une date plus récente a été choisie comme époque informatique (et par association le début de la révolution informatique. ;-)
Chris Nava
@Chris Nava: "le plus"? Je suppose que par "la plupart" vous voulez dire "Linux". Les autres systèmes d'exploitation ne fonctionnent pas de la même manière que Linux. Le problème est que "raisonnable" et "pourquoi 1/1/1970?" ne sont pas des questions faciles à répondre; plus important encore, la réponse n'a pas d'importance. « raisonnable » est vrai, mais ce n'est pas la raison pour laquelle . La raison pour laquelle est quelque chose que seul Ken Thompson peut répondre.
S.Lott
2

Q) "Pourquoi les dates sont-elles calculées à partir du 1er janvier 1970?"

A) Il devait être aussi récent que possible, mais inclure du passé. Il n'y avait probablement aucune autre raison significative, car beaucoup de gens ressentent la même chose.

Ils savaient que cela posait un problème s'ils le placaient trop loin dans le passé et ils savaient que cela donnait des résultats négatifs si c'était dans le futur. Il n'était pas nécessaire d'aller plus loin dans le passé car les événements se produiront très probablement dans le futur.

Notes: Les mayas, par contre, avaient le besoin de replacer les événements dans le passé, car ils avaient la connaissance de beaucoup de passé, pour lesquels ils ont fait un calendrier à long terme. Juste pour placer tous les phénomènes de routine sur le calendrier.

L'horodatage n'a pas été conçu comme un calendrier, c'est une époque. Et je crois que les mayas ont fait leur calendrier à long terme en utilisant la même perspective. (ce qui signifie qu'ils savaient très bien qu'ils n'avaient aucune relation avec le passé, ils avaient juste besoin de le voir à plus grande échelle)

Yezpahr
la source
1

Oui, C (et sa famille). C'est là que Java l'a également emporté.

Péter Török
la source