← Tutti gli articoli

Tempo Unix vs tempo POSIX vs epoch timestamp: terminologia spiegata

"Epoch timestamp", "tempo Unix" e "tempo POSIX" si usano in modo intercambiabile e, nel codice di tutti i giorni, sono lo stesso numero — secondi dal 1970-01-01 UTC. Ma provengono da posti diversi: il tempo Unix è una convenzione, il tempo POSIX è una specifica formale (IEEE Std 1003.1), ed "epoch" è un termine generico per qualsiasi istante di riferimento. Questa guida associa ogni termine al suo standard e mostra dove le differenze — secondi intercalari, intervallo e altre epoch — contano davvero.

Tempo Unix, tempo POSIX, epoch timestamp: la risposta breve

Nel codice di tutti i giorni, i tre termini indicano lo stesso numero: secondi dal 1970-01-01 00:00:00 UTC. La distinzione sta nella loro provenienza. "Tempo Unix" è una convenzione ereditata dagli albori di Unix e dalla libreria C. "Tempo POSIX" è lo stesso conteggio messo per iscritto come standard formale (IEEE Std 1003.1), che fissa ogni giorno a esattamente 86.400 secondi. "Epoch timestamp" è il più generico dei tre — un'"epoch" è semplicemente un istante di riferimento fisso e, anche se quasi sempre indica l'epoch Unix del 1970, altri sistemi (NTP, GPS, Windows) contano da epoch diverse. La tabella sottostante associa ogni termine al suo standard e a come tratta i secondi intercalari.

TermineContaDefinito daSecondi intercalariNote
Tempo UnixSecondi dal 1970-01-01 00:00:00 UTCConvenzione (Unix / libreria C)IgnoratiIl nome quotidiano tra gli sviluppatori
Tempo POSIXSecondi dall'epoch, tramite una formula fissaIEEE Std 1003.1 §4.16Ignorati — ogni giorno ha esattamente 86.400 sLa versione formalmente specificata del tempo Unix
Epoch timestampUn conteggio da un'epoch fissa (di solito l'epoch Unix)Termine generico — l'epoch variaDipende dall'epoch/dal sistema"Epoch" è l'istante di riferimento, non sempre il 1970
Epoch in millisecondiMillisecondi dal 1970-01-01 UTCStessa epoch, unità più fineIgnorati13 cifre oggi; predefinito in JavaScript e Java

Che 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 indica il timestamp Unix: il numero di secondi dal 1° gennaio 1970 alle 00:00:00 UTC. Un valore di 0 indica l'epoch Unix esatta. I valori positivi sono successivi al 1970; quelli negativi, precedenti. La parola che fa il lavoro è "epoch" — nomina l'istante iniziale, e tutto il resto è solo contare da lì. Per la definizione semplice e il significato del timestamp zero, vedi Il tempo epoch spiegato; questo articolo si concentra su come si relazionano i tre nomi concorrenti.

Tempo Unix vs tempo POSIX: cosa dice lo standard

Il tempo Unix e il tempo POSIX si riferiscono allo stesso conteggio, ma solo il tempo POSIX è formalmente specificato. IEEE Std 1003.1 — lo standard POSIX — definisce "Seconds Since the Epoch" con una formula esplicita che converte una data di calendario UTC in un singolo intero. La proprietà distintiva di quella formula è che tratta ogni giorno come esattamente 86.400 secondi (60 × 60 × 24). È una semplificazione deliberata: ignora i secondi intercalari, scambiando la precisione astronomica con un valore banale da calcolare, ordinare e memorizzare. "Tempo Unix" è il nome colloquiale della stessa grandezza, anteriore allo standard; "tempo POSIX" è ciò che citi quando ti serve la definizione precisa.

  • Formula POSIX: una data UTC si mappa su un intero, con ogni giorno fissato a 86.400 secondi
  • Conseguenza: un timestamp Unix/POSIX segue l'UTC ma non conta mai i secondi intercalari inseriti
  • time_t è il tipo C che lo contiene — storicamente con segno a 32 bit, ora di solito con segno a 64 bit
  • Stesso istante → stesso valore su ogni sistema conforme, indipendentemente da fuso o locale

Il tempo Unix e il tempo POSIX differiscono mai davvero?

Per quasi tutto il software, no — sono lo stesso numero e puoi usare i termini in modo intercambiabile. Le differenze emergono solo al confine tra tempo civile e fisica. Poiché entrambi ignorano i secondi intercalari, un timestamp Unix/POSIX non è un vero conteggio di secondi SI trascorsi dal 1970: non include i 27 secondi intercalari inseriti nell'UTC dal 1972. (Il TAI, una scala di tempo atomica continua, è esattamente 37 secondi avanti rispetto all'UTC dal 2017.) Intorno a un secondo intercalare, un orologio POSIX ripete o salta un secondo affinché il giorno resti esattamente di 86.400 secondi. Le grandi piattaforme evitano quella discontinuità con il leap smearing — distribuendo il secondo extra su un'intera giornata affinché nessun timestamp sia mai ambiguo. Se fai cronometraggio ad alta precisione, pianifichi attraverso un secondo intercalare o confronti con GPS o TAI, è lì che "Unix" e "POSIX" smettono di essere accademici e il modello dei secondi intercalari conta.

Altre epoch che incontrerai

"Epoch timestamp" significa "timestamp Unix" solo per convenzione. Un'epoch è semplicemente l'istante da cui un orologio conta, e diversi sistemi molto usati contano da un'altra. Quando un valore non si decodifica in una data plausibile degli anni 2020 con l'epoch Unix, spesso il motivo è un'epoch diversa.

  • Epoch Unix/POSIX — 1970-01-01 UTC; secondi (o ms/µs). Il valore predefinito quasi ovunque
  • Epoch NTP — 1900-01-01 UTC; usata dal Network Time Protocol (RFC 5905)
  • Epoch GPS — 1980-01-06; il tempo GPS non ha secondi intercalari, quindi è andato avanti rispetto all'UTC (18 secondi nel 2026)
  • Windows FILETIME — 1601-01-01 UTC, contato in intervalli di 100 nanosecondi
  • JavaScript / Java — l'epoch Unix ma in millisecondi, ecco perché quei valori hanno 13 cifre

Perché il timestamp dal 1970 è diventato standard

L'epoch Unix era pratica per i primi sistemi Unix e divenne una convenzione man mano che le idee di Unix si diffondevano nelle librerie C, in Linux, nei database, nei server web e nei linguaggi di programmazione. Un singolo timestamp numerico è più facile da ordinare, confrontare, trasmettere e memorizzare di una stringa di data localizzata. Una volta che la libreria C e poi POSIX standardizzarono il conteggio, il 1970 fu fissato in tutto l'ecosistema — ecco perché un valore generato su una piattaforma si decodifica in modo identico su qualsiasi altra.

Esempi di epoch timestamp

Alcuni valori noti rendono la definizione più facile da ricordare.

  • 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

Articoli correlati

FAQ

Il tempo epoch è lo stesso del tempo Unix?
Nell'uso comune degli sviluppatori, sì. Il tempo epoch di solito indica il tempo Unix: i secondi trascorsi dal 1970-01-01 00:00:00 UTC.
Qual è la definizione di tempo Unix?
Il tempo Unix è definito come i secondi dal 1970-01-01 00:00:00 UTC, senza contare i secondi intercalari.
Che cos'è il tempo POSIX?
Il tempo POSIX è la versione formalmente specificata del tempo Unix. IEEE Std 1003.1 ("Seconds Since the Epoch") fornisce una formula esatta che conta i secondi dal 1970-01-01 00:00:00 UTC e tratta ogni giorno come esattamente 86.400 secondi.
Perché il tempo POSIX ignora i secondi intercalari?
Per scelta progettuale. La formula POSIX fissa un giorno a esattamente 86.400 secondi affinché il valore sia semplice da calcolare e memorizzare. Di conseguenza un timestamp Unix/POSIX segue l'UTC ma non rappresenta i secondi intercalari inseriti in esso.
Un timestamp POSIX tiene conto del fuso orario?
No. Un timestamp POSIX rappresenta un istante. I fusi orari vengono applicati 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) è identica su piattaforme e linguaggi moderni, quindi lo stesso istante produce lo stesso timestamp Unix ovunque. Windows usa internamente la propria epoch FILETIME (1601), ma i timestamp Unix e POSIX standard usano il 1970.