Timestamp Formats

Formati dei timestamp Unix spiegati

Un riferimento completo di tutti i formati dei timestamp Unix — secondi, millisecondi, microsecondi, ISO 8601 e RFC 2822 — con esempi che mostrano quale formato usa ogni linguaggio e database, e come distinguerli a colpo d'occhio.

Tutti i formati dei timestamp Unix a colpo d'occhio

Un timestamp Unix è solo un numero, e il suo formato è in realtà solo la sua unità — con quanta finezza conta dal 1° gennaio 1970 UTC. L'unità è quasi sempre leggibile dal numero di cifre: 10 cifre sono secondi, 13 sono millisecondi, 16 sono microsecondi, 19 sono nanosecondi. I due formati di stringa, ISO 8601 e RFC 2822, sono invece autodescrittivi. La tabella sotto è l'intero panorama; le sezioni successive coprono ogni formato e come distinguerli.

FormatoCifreEsempioUsato da
Secondi101700000000Python, PHP, Go, Ruby, C, SQL
Millisecondi131700000000000JavaScript, Java, .NET
Microsecondi161700000000000000PostgreSQL, Rust
Nanosecondi191700000000000000000Go UnixNano, sistemi di tracing
ISO 8601stringa2023-11-15T06:13:20ZAPI, log (autodescrittivo)
RFC 2822stringaWed, 15 Nov 2023 06:13:20 GMTE-mail, header HTTP

Il tempo Unix in secondi — il formato universale

Il formato più comune: un intero a 32 o 64 bit che conta il numero di secondi interi dal 1° gennaio 1970 00:00:00 UTC. Attualmente un numero di 10 cifre intorno a 1,7 miliardi.

  • Esempio: 1700000000 = 2023-11-15 06:13:20 UTC
  • Usato da: Python time.time(), PHP time(), Go time.Now().Unix(), Ruby Time.now.to_i, C time(NULL)
  • Memorizzato come: int a 32 bit (legacy, anno max 2038), int a 64 bit (moderno, sicuro per miliardi di anni)
  • Database: MySQL UNIX_TIMESTAMP(), PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT

Il tempo Unix in millisecondi — il formato di JavaScript

Millisecondi dall'epoch Unix: un intero di 13 cifre che fornisce precisione al millisecondo. È il formato che l'oggetto Date di JavaScript usa internamente.

  • Esempio: 1700000000000 = 2023-11-15 06:13:20.000 UTC
  • Usato da: JavaScript Date.now(), Java System.currentTimeMillis(), .NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
  • Convertire in secondi: Math.floor(ms / 1000)
  • Convertire da secondi: seconds * 1000

ISO 8601 — lo standard leggibile dall'uomo

L'ISO 8601 è uno standard internazionale per rappresentare date e ore come stringhe. A differenza dei timestamp Unix, è autodescrittivo: il formato codifica sia la data/ora sia l'offset di fuso.

  • 2023-11-15T06:13:20Z — UTC (il suffisso Z significa UTC)
  • 2023-11-15T01:13:20-05:00 — con offset UTC esplicito (EST)
  • 2023-11-15T06:13:20.000Z — con millisecondi
  • JavaScript: date.toISOString() restituisce sempre UTC con suffisso Z
  • Python: datetime.isoformat(), Go: time.Format(time.RFC3339)

RFC 2822 — formato di data e-mail e HTTP

L'RFC 2822 (aggiornato dall'RFC 5322 per l'e-mail, e rispecchiato dall'RFC 9110 per HTTP) è il formato di data leggibile usato negli header e-mail e nelle risposte HTTP. Il Date.toUTCString() di JavaScript restituisce questo formato.

  • Esempio: Wed, 15 Nov 2023 06:13:20 GMT
  • Usato in: header di risposta HTTP (Last-Modified, Date, Expires), header e-mail (Date:)
  • JavaScript: date.toUTCString()
  • Meno comune nelle API moderne ma ancora ampiamente incontrato nell'infrastruttura web

Come rilevare il formato del timestamp

Quando ricevi un valore di timestamp sconosciuto, queste regole ne identificano il formato. Il numero di cifre risolve ogni caso numerico; i due formati di stringa sono ovvi a vista.

IndizioFormato
10 cifreSecondi Unix
13 cifreMillisecondi Unix
16 cifreMicrosecondi
19 cifreNanosecondi
Contiene T o ZISO 8601
Virgola o nome del giornoRFC 2822
Intero negativoSecondi o millisecondi prima del 1970
  • Verifica di buon senso: qualsiasi valore numerico dovrebbe decodificare in una data credibile dell'era attuale (circa 2001–2038 per secondi a 10 cifre)
  • Una data vicina al 1970 o a migliaia di anni significa che l'unità è stata letta male

Microsecondi e nanosecondi

Alcuni sistemi ad alta precisione usano unità più piccole del millisecondo. Sono rare nel codice applicativo ma compaiono nei sistemi di basso livello, negli interni dei database e negli strumenti di osservabilità.

  • Microsecondi (µs): intero di 16 cifre — Rust SystemTime as_micros(), PostgreSQL clock_gettime()
  • Nanosecondi (ns): intero di 19 cifre — Go time.Now().UnixNano(), Rust SystemTime as_nanos()
  • PostgreSQL EXTRACT(EPOCH) restituisce un numero in virgola mobile con i microsecondi come parte frazionaria
  • Convertire i nanosecondi in secondi: dividere per 1.000.000.000 (1e9)

Risoluzione e precisione dei sottosecondi

Ogni formato sopra porta una risoluzione temporale diversa. Scegliere un formato significa scegliere con quanta finezza puoi distinguere due momenti — da un secondo fino a un nanosecondo.

  • Risoluzione a 1 secondo: secondi Unix (10 cifre), POSIX time_t tradizionale
  • 1 millisecondo: JavaScript Date, MongoDB BSON Date, Java Instant.toEpochMilli()
  • 1 microsecondo: timestamp Chrome/WebKit, Python datetime.timestamp(), PostgreSQL timestamp precision 6
  • 100 nanosecondi: Windows FILETIME, .NET DateTime.Ticks
  • 1 nanosecondo: Java Instant (precisione piena), Go time.UnixNano(), JS Temporal.Instant.epochNanoseconds (BigInt)
  • Picosecondo e oltre: formato wire PTP/IEEE 1588 (1/2^32 di secondo), campo frazione di NTP
  • Scegli la risoluzione più grossolana che soddisfa le tue esigenze — la precisione sotto il secondo si perde spesso nella serializzazione JSON o nel round-trip di stringa
  • Quando converti tra formati, passa per millisecondi o nanosecondi Unix (via BigInt) — è il minimo comune denominatore che preserva la precisione

Convertitori di formato di timestamp

Converti tra il tempo Unix e i formati di timestamp specifici di piattaforma che incontri sul campo:

FAQ

Quante cifre ha un timestamp Unix?
Un timestamp Unix moderno in secondi ha 10 cifre (circa 1,7 miliardi); in millisecondi ha 13 cifre. I microsecondi hanno 16 cifre e i nanosecondi 19 cifre.
Quale formato di timestamp usa JavaScript?
Il Date di JavaScript lavora in millisecondi — Date.now() restituisce un timestamp di 13 cifre in millisecondi, e new Date(ms) si aspetta millisecondi. Moltiplica i secondi Unix per 1000 prima di passarli a Date.
Qual è la differenza tra il tempo Unix e l'ISO 8601?
Il tempo Unix è un singolo numero di secondi o millisecondi dal 1970 UTC e non porta alcun fuso. L'ISO 8601 è una stringa autodescrittiva come 2023-11-15T06:13:20Z che codifica la data, l'ora e l'offset.
Cos'è il formato di data RFC 2822?
L'RFC 2822 (aggiornato dall'RFC 5322) è il formato di data leggibile usato nell'e-mail e negli header HTTP, come "Wed, 15 Nov 2023 06:13:20 GMT". JavaScript lo produce con date.toUTCString().
Come rilevo se un timestamp è in secondi o in millisecondi?
Conta le cifre: un valore di 10 cifre è in secondi, uno di 13 cifre è in millisecondi. Se un valore si converte in una data vicina al 1970 o lontana nel futuro, l'unità è stata letta male.