Perché le date vengono calcolate dal 1 gennaio 1970?


95

C'è qualche motivo dietro l'utilizzo della data (1 gennaio 1970) come standard predefinito per la manipolazione dell'ora? Ho visto questo standard in Java e in Python. Sono a conoscenza di queste due lingue. Esistono altre lingue popolari che seguono lo stesso standard?

Per favore descrivi.


1
Un altro linguaggio popolare che segue lo stesso standard è PHP, è un punto di inizio temporale abbastanza comune.
Greg K

Risposte:


65

È lo standard del tempo Unix.

Il tempo Unix, o tempo POSIX, è un sistema per descrivere i punti nel tempo, definito come il numero di secondi trascorsi dalla mezzanotte del tempo universale coordinato prolettico (UTC) del 1 gennaio 1970, senza contare i secondi intercalari.


5
Sai se Kernighan e Thompson hanno espresso una ragione per scegliere quel momento oltre "È un numero tondo leggermente prima che iniziassimo a costruire la cosa"?
dmckee --- gattino ex moderatore

È l'inizio di un anno, è nel fuso orario zero (Zulu). Entrambi semplificano il codice di formattazione della data.
Donal Fellows

28
Non conta i secondi intercalari? Non conoscevo quel dettaglio. Dopo averci pensato per qualche istante, posso capire perché lo faresti in quel modo, ma amico. il mio mondo è in frantumi. di 24 secondi.
ritorno

69

utilizzando la data (1 gennaio 1970) come standard predefinito

La Domanda fa due false supposizioni:

  • Tutto il monitoraggio del tempo nell'informatica viene effettuato come conteggio dal 1970.
  • Tale tracciamento è standard.

Due dozzine di epoche

Il tempo in informatica non è sempre tracciato dall'inizio del 1970 UTC . Sebbene quel riferimento all'epoca sia popolare, vari ambienti di elaborazione nel corso dei decenni hanno utilizzato almeno quasi due dozzine di epoche . Alcuni sono di altri secoli. Vanno dall'anno 0 (zero) al 2001.

Eccone alcuni.

0 gennaio 1 a.C.

1 gennaio, 1 d.C.

15 ottobre 1582

1 gennaio 1601

31 dicembre 1840

17 novembre 1858

30 dicembre 1899

31 dicembre 1899

1 gennaio 1900

1 gennaio 1904

31 dicembre 1967

1 gennaio 1980

6 gennaio 1980

1 gennaio 2000

1 gennaio 2001

Epoca Unix comune, ma non dominante

L'inizio del 1970 è popolare, probabilmente a causa del suo utilizzo da parte di Unix. Ma questo non è affatto dominante. Per esempio:

ISO 8601

Supponendo che un count-since-epoch stia usando l'epoca Unix sta aprendo una grande vulnerabilità per i bug. Un tale conteggio è impossibile da decifrare all'istante per un essere umano, quindi errori o problemi non saranno facilmente segnalati durante il debug e la registrazione. Un altro problema è l'ambiguità della granularità spiegata di seguito.

Suggerisco caldamente invece di serializzare i valori di data e ora come stringhe ISO 8601 non ambigue per lo scambio di dati piuttosto che un numero intero count-since-epoch: YYYY-MM-DDTHH:MM:SS.SSSZcome 2014-10-14T16:32:41.018Z.

Count Of What Since Epoch

Un altro problema con il monitoraggio del tempo count-since-epoch è l'unità di tempo, con almeno quattro livelli di risoluzione comunemente usati.

Diagramma che mostra il conteggio del software diverso dall'epoca in secondi, millisecondi, microsecondi o nanosecondi.


1
Mi chiedo quale sia l'epoca dominante in questo momento ... l'hai basata sui dati?
PascalVKooten

1
@PascalVKooten Molte epoche diverse vengono utilizzate in molti ambienti e sistemi software diversi. Quindi non esiste un'epoca dominante. Il mio punto qui è di non presumere mai l'epoca. Conosci la tua fonte di dati. L'approccio migliore è che un'origine dati eviti completamente il problema dell'epoca e utilizzi semplicemente le stringhe ISO 8601, IMHO.
Basil Bourque

1
Grazie per la tua risposta. Capisco che ce ne siano molti, ma sono curioso di sapere se ad esempio POSIX è diventato più popolare nel tempo.
PascalVKooten

7

perché è sempre il 1 ° gennaio 1970, perché - '1 ° gennaio 1970' di solito chiamato come "data dell'epoca" è la data in cui l'ora è iniziata per i computer Unix, e quel timestamp è contrassegnato come '0'. Qualsiasi tempo da quella data viene calcolato in base al numero di secondi trascorsi. In parole più semplici ... il timestamp di qualsiasi data sarà la differenza in secondi tra quella data e il "1 gennaio 1970" Il timestamp è solo un numero intero che inizia dal numero "0" su "Midnight 1st January 1970" e continua ad aumentare di '1' ogni secondo passaggio Per la conversione dei timestamp UNIX in date leggibili, PHP e altri linguaggi open source forniscono funzioni integrate.


5

C'è qualche motivo dietro l'utilizzo della data (1 gennaio 1970) come standard per la manipolazione dell'ora?

Nessun motivo che importi.

Il timemodulo di Python è la libreria C. Chiedi a Ken Thompson perché ha scelto quella data per una data epocale. Forse era il compleanno di qualcuno.

Excel utilizza due epoche diverse. Qualche motivo per cui versioni diverse di Excel utilizzano date diverse?

Ad eccezione del programmatore vero e proprio, nessun altro saprà mai perché sono state prese quelle decisioni.

E...

Non importa perché è stata scelta la data. Lo era e basta.

Gli astronomi usano la propria data epocale: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Perché? È necessario scegliere una data per far funzionare la matematica. Qualsiasi data casuale funzionerà.

Una data lontana nel passato evita i numeri negativi per il caso generale.

Alcuni dei pacchetti più intelligenti utilizzano il prolettico anno gregoriano 1. Qualche motivo per cui l'anno 1?
C'è una ragione data in libri come Calcoli calendari: è matematicamente leggermente più semplice.

Ma se ci pensi, la differenza tra 1/1/1 e 1/1/1970 è solo del 1969, un banale offset matematico.


1
Se fosse stato scelto 1/1/1 avremmo esaurito i secondi (2 ^ 31) a questo punto. Allo stato attuale, affrontiamo un problema simile all'anno 2000 nel 2038 per i sistemi operativi a 32 bit. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava

1
@ Chris Nava: Le persone che usano 1/1/1 contano i giorni, non i secondi. 2 miliardi di giorni sono circa 5 milioni di anni. Spesso mantengono una coppia (giorno, ora) per massimizzare la risoluzione temporale; ci sono solo 86400 secondi nella maggior parte dei giorni.
S.Lott

@ S.Lott: Sì. Stavo solo facendo notare che poiché la maggior parte del software conta i secondi (non i minuti) dall'epoca, 1/1/1 era troppo lontano nel passato per essere una data di inizio ragionevole. Pertanto, come epoca del computer è stata scelta una data più recente (e per associazione l'inizio della rivoluzione informatica. ;-)
Chris Nava

@ Chris Nava: "most"? Presumo che con "la maggior parte" si intenda "Linux". Gli altri sistemi operativi non funzionano allo stesso modo di Linux. Il problema è che "ragionevole" e "perché 1/1/1970?" non sono domande facili a cui rispondere; cosa più importante, la risposta non ha importanza. "ragionevole" è vero, ma non è il motivo per cui . Il motivo per cui è qualcosa che solo Ken Thompson può rispondere.
S.Lott


2

D) "Perché le date vengono calcolate dal 1 gennaio 1970?"

A) Doveva essere il più recente possibile, ma includere un po 'di passato. Molto probabilmente non c'era nessun altro motivo significativo, poiché molte persone si sentono allo stesso modo.

Sapevano che avrebbe posto un problema se lo avessero inserito troppo lontano nel passato e sapevano che avrebbe dato risultati negativi se fosse stato nel futuro. Non c'era bisogno di andare più a fondo nel passato poiché molto probabilmente gli eventi si verificheranno in futuro.

Note: I Maya, d'altra parte, avevano la necessità di collocare gli eventi nel passato, poiché avevano la conoscenza di molto passato, per il quale creavano un calendario a lungo termine. Giusto per collocare tutti i fenomeni di routine sul calendario.

Il timestamp non è stato inteso come un calendario, è un'epoca. E credo che i Maya abbiano creato il loro calendario a lungo termine usando la stessa prospettiva. (nel senso che sapevano benissimo di non avere alcun rapporto con il passato, avevano solo bisogno di vederlo in una scala più grande)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.