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.
| Termine | Conta | Definito da | Secondi intercalari | Note |
|---|---|---|---|---|
| Tempo Unix | Secondi dal 1970-01-01 00:00:00 UTC | Convenzione (Unix / libreria C) | Ignorati | Il nome quotidiano tra gli sviluppatori |
| Tempo POSIX | Secondi dall'epoch, tramite una formula fissa | IEEE Std 1003.1 §4.16 | Ignorati — ogni giorno ha esattamente 86.400 s | La versione formalmente specificata del tempo Unix |
| Epoch timestamp | Un conteggio da un'epoch fissa (di solito l'epoch Unix) | Termine generico — l'epoch varia | Dipende dall'epoch/dal sistema | "Epoch" è l'istante di riferimento, non sempre il 1970 |
| Epoch in millisecondi | Millisecondi dal 1970-01-01 UTC | Stessa epoch, unità più fine | Ignorati | 13 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.