web-dev-qa-db-fra.com

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

Y a-t-il une raison derrière l'utilisation de la date (1er janvier 1970) comme standard par défaut pour la manipulation de l'heure? J'ai vu ce standard en Java ainsi qu'en Python. Ces deux langages que je connais. Y a-t-il d'autres langages populaires qui suivent le même standard?

Décrivez s'il vous plait.

68

C'est la norme de 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 minuit le temps universel coordonné proleptique (UTC) du 1er janvier 1970, sans compter les secondes intercalaires.

49
soldier.moth

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

La Question fait deux fausses hypothèses:

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

Deux douzaines d'époques

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

Voici quelques-uns.

0 janvier 1 BC

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

Époque Unix commune, mais pas dominante

Le début de 1970 est populaire, probablement en raison de son utilisation par Unix. Mais ce n'est nullement 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 compte désormais plus d'un milliard d'appareils iOS/OS X utilisant le Cocoa (NSDate) Epoch of 1 January 2001, GMT.
  • Le système de navigation par satellite GPS utilise January 6, 1980 tandis que l'alternative européenne Galileo utilise 22 August 1999.

ISO 8601

En supposant qu'un décompte depuis l'époque utilise l'époque Unix, cela ouvre une grande vulnérabilité pour les 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 de sérialiser plutôt les valeurs de date-heure en tant que chaînes sans ambiguïté ISO 8601 pour l'échange de données plutôt qu'en nombre entier depuis l'époque: YYYY-MM-DDTHH:MM:SS.SSSZ tel que 2014-10-14T16:32:41.018Z.

Nombre de Quoi depuis l'époque

Un autre problème avec le suivi du temps 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 de 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 intégrée et la bibliothèque Joda-Time .
  • Microsecondes
    Utilisé par des bases de données telles que Postgres .
  • Nanosecondes
    Utilisé par le nouveau package Java.time dans Java 8.

Diagram showing different software counting from Epoch by seconds, milliseconds, microseconds, or nanoseconds.

50
Basil Bourque

1er janvier 1970 00:00:00 am est le point zéro de heure POSIX .

5
Benjamin Bannier

Y a-t-il une raison derrière l'utilisation de la date (1er janvier 1970) comme standard pour la manipulation du temps?

Aucune raison qui compte.

Le module time de Python est la bibliothèque C. Demandez à Ken Thompson pourquoi il a choisi cette date pour une date d'époque. 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?

À l'exception du véritable programmeur, personne d'autre ne saura jamais pourquoi ces types de décisions ont été prises.

Et...

Peu importe pourquoi la date a été choisie. C'était juste.

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

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

Une date lointaine dans le passé évite les chiffres négatifs pour le cas général.

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

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

4
S.Lott

pourquoi son toujours 1er janvier 1970, parce que - "1er janvier 1970" généralement appelé comme "date d'époque" est la date à laquelle l'heure a commencé pour les ordinateurs Unix, et cet horodatage est marqué comme "0". Tout temps écoulé 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 '1er janvier 1970' L'horodatage est juste un entier qui a commencé à partir du nombre '0' sur 'Minuit 1er janvier 1970' et continue à incrémenter par '1' à chaque deuxième passage Pour la conversion des horodatages UNIX en dates lisibles PHP et d'autres langages open source fournissent des fonctions intégrées.

3
Friyank

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 importante, car beaucoup de gens pensent de la même façon.

Ils savaient que cela poserait un problème s'ils le plaçaient trop loin dans le passé et ils savaient que cela donnerait des résultats négatifs si c'était à l'avenir. Il n'était pas nécessaire d'aller plus loin dans le passé, car les événements auront probablement lieu à l'avenir.

Notes: Les mayas, d'autre part, avaient besoin de placer 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'était pas censé être un calendrier, c'est une époque. Et je crois que les Mayas ont fait leur calendrier à long terme en utilisant cette même perspective. (ce qui signifie qu'ils savaient sacrément bien qu'ils n'avaient aucune relation avec le passé, ils avaient juste besoin de le voir à plus grande échelle)

2
Yezpahr

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

0
Péter Török