Il timestamp epoch spiegato: tempo Unix, tempo POSIX e secondi dal 1970

Un timestamp epoch è un modo compatto di rappresentare un momento come il tempo trascorso da un punto di partenza fisso. Questa guida spiega il tempo Unix, i timestamp POSIX, la data dell'epoch Unix e perché i secondi dal 1970 UTC sono diventati il default nel software.

Cos'è un epoch timestamp?

Un epoch timestamp è un conteggio numerico misurato da un momento di riferimento fisso chiamato epoch. Nell'uso quotidiano degli sviluppatori, epoch timestamp di solito significa timestamp Unix: il numero di secondi dal 1° gennaio 1970 alle 00:00:00 UTC. Un valore 0 è l'epoch Unix esatto. I valori positivi sono dopo il 1970; quelli negativi, prima.

Tempo Unix vs timestamp POSIX

Tempo Unix e timestamp POSIX sono di solito usati in modo intercambiabile nel codice applicativo. Entrambi indicano i secondi trascorsi dall'epoch Unix, ignorando i secondi intercalari per semplificare il tempo civile. Il risultato pratico è un intero stabile che funziona tra sistemi operativi, linguaggi, database, API e file di log.

  • Data dell'epoch Unix: 1970-01-01 00:00:00 UTC
  • Timestamp Unix 0: l'inizio esatto dell'epoch Unix
  • Timestamp POSIX: secondi dall'epoch Unix su sistemi compatibili POSIX
  • Millisecondi epoch: lo stesso epoch, ma contato in millisecondi
  • Microsecondi o nanosecondi epoch: maggiore precisione per database e tracing

Perché il timestamp dal 1970 è diventato standard

L'epoch Unix era pratico per i primi sistemi Unix ed è diventato una convenzione man mano che le idee di Unix si sono diffuse nelle librerie C, in Linux, nei database, nei server web e nei linguaggi. Un singolo timestamp numerico è più facile da ordinare, confrontare, trasmettere e memorizzare di una stringa di data localizzata.

Esempi di epoch timestamp

Alcuni valori noti rendono più facile ricordare la definizione.

  • 0 = 1970-01-01 00:00:00 UTC
  • 1 = 1970-01-01 00:00:01 UTC
  • 86400 = 1970-01-02 00:00:00 UTC
  • 1700000000 = 2023-11-14 22:13:20 UTC
  • 1767225600 = 2026-01-01 00:00:00 UTC

FAQ sull'epoch timestamp

Il tempo epoch è lo stesso del tempo Unix?
Nell'uso comune degli sviluppatori, sì. Tempo epoch di solito significa tempo Unix: secondi trascorsi dal 1970-01-01 00:00:00 UTC.
Qual è la definizione di tempo Unix?
Il tempo Unix è definito come secondi dal 1970-01-01 00:00:00 UTC, senza contare i secondi intercalari.
Un timestamp POSIX tiene conto del fuso?
No. Un timestamp POSIX rappresenta un istante. I fusi si applicano solo quando si formatta quell'istante come data leggibile.
Gli epoch timestamp sono uguali su Windows, Linux e macOS?
L'epoch Unix (1970-01-01 00:00:00 UTC) è identico tra piattaforme e linguaggi moderni, quindi lo stesso istante dà lo stesso timestamp Unix ovunque. Windows usa internamente il proprio epoch FILETIME (1601), ma i timestamp Unix e POSIX standard usano il 1970.