Skip to main content

Timestamp in data

Converti un timestamp in una data leggibile. Supporta secondi, millisecondi e nanosecondi.

Nel 2038 un orologio a 32 bit non torna al 1970: atterra nel 1901

Una marca temporale con segno a 32 bit si esaurisce a 2.147.483.647 secondi, cioè il 19 gennaio 2038 alle 03:14:07 UTC. Il secondo successivo non torna a zero. Salta al valore più negativo che il tipo può contenere, portando l'orologio al 13 dicembre 1901: un sistema che fallisce così indietreggia di 137 anni.

Come funziona

  • Converte una marca temporale Unix in una data leggibile e viceversa, in UTC e in ora locale.
  • Rileva se l'input è in secondi o in millisecondi, che è l'errore più comune.
  • Gestisce le marche temporali negative, che sono valide e rappresentano date anteriori al 1970.
marca temporale = secondi trascorsi dal 1970-01-01 00:00:00 UTC

massimo a 32 bit con segno = 2.147.483.647 → 2038-01-19 03:14:07 UTC
  il secondo successivo salta a −2.147.483.648 → 1901-12-13 20:45:52 UTC

massimo a 64 bit con segno ≈ 9,223 × 10¹⁸ secondi: circa 292 miliardi di anni

Esempio pratico

Lo stesso valore a dieci cifre letto in due modi, più il limite che chiude il tempo a 32 bit.

  1. 1770000000 letto come secondi → 2026-02-02
  2. 1770000000 letto come millisecondi → 1970-01-21
  3. 10 cifre significano secondi; 13 cifre millisecondi
  4. 2147483647 → 2038-01-19 03:14:07 UTC
  5. un secondo dopo → 1901-12-13 20:45:52 UTC

Il pericoloso è l'errore di unità, perché fallisce in silenzio. Leggere millisecondi come secondi ti scaraventa nell'anno 58.000 e salta subito all'occhio; leggere secondi come millisecondi ti porta al gennaio 1970, che sembra una data plausibile e supera la revisione.

Come leggere il risultato

  • Una data del 1º gennaio 1970 in produzione significa quasi sempre che al formattatore è arrivato un valore nullo o zero anziché una marca temporale reale. L'epoca è il valore predefinito di un intero non inizializzato, ed è per questo che quella data compare così spesso nelle segnalazioni di bug.
  • Le marche temporali negative sono del tutto valide e rappresentano date anteriori al 1970: −86.400 è il 31 dicembre 1969. I sistemi che le rifiutano non possono conservare date storiche, il che è un limite reale e non una misura di sicurezza.
  • La marca temporale in sé non porta alcun fuso orario; è un conteggio assoluto di secondi. Il fuso entra solo alla formattazione, ed è per questo che lo stesso valore appare come due date di calendario diverse per due utenti e perché salvare l'ora locale anziché una marca temporale crea tanti problemi.
  • Il tempo Unix ignora per definizione i secondi intercalari, ripetendo o allungando un secondo anziché contarlo. Non è quindi un conteggio autentico di secondi SI trascorsi, il che conta per la misura precisa degli intervalli e quasi mai per altro.

Domande frequenti

Perché la mia data compare come 1970?
Perché il valore arrivato al formattatore era zero o nullo, e zero è l'epoca. Raramente è un bug di formattazione: la marca temporale non è mai stata impostata, oppure si è persa più a monte, e il 1º gennaio 1970 è l'aspetto che ha un intero non impostato una volta reso.
Come distinguo i secondi dai millisecondi?
Conta le cifre. Le marche temporali attuali hanno 10 cifre in secondi e 13 in millisecondi. Trattare i secondi come millisecondi è l'errore da cui vale la pena difendersi, perché produce una data dei primi del 1970 che sembra reale anziché palesemente assurda.

Guida al tempo Unix

Il tempo Unix (tempo epoch) è un sistema per memorizzare date e orari come numero di secondi o millisecondi trascorsi dalla mezzanotte del 1° gennaio 1970 (UTC). Questo standard è ampiamente usato nella programmazione, nei database e nei protocolli di rete per la sua semplicità e la facilità di confronto tra date. Il valore 0 rappresenta esattamente quella data, e ogni secondo successivo aggiunge 1 al contatore.

Diversi formati di timestamp

Il formato più comune è Unix in secondi (es. 1704067200), usato nei sistemi Linux e PHP. Il secondo formato diffuso è Unix in millisecondi (es. 1704067200000), usato in JavaScript e nella JVM. Il terzo è in nanosecondi (es. 1704067200000000), impiegato nei sistemi che richiedono precisione estrema, come database o sistemi finanziari.

Problema dell'anno 2038

Il formato Unix tradizionale sui sistemi a 32 bit ha un limite massimo di 2.147.483.647 secondi, che corrisponde al 19 gennaio 2038. Dopo tale data il valore diventa negativo. I sistemi moderni risolvono il problema usando numeri a 64 bit, sufficienti per moltissimo tempo. Le nuove applicazioni dovrebbero usare millisecondi o nanosecondi per evitare problemi di compatibilità.

Fusi orari

Il timestamp Unix è sempre espresso in UTC, quindi non contiene informazioni sul fuso orario. Per mostrare la data in locale, il sistema aggiunge lo scostamento del fuso. Ad esempio, lo stesso valore di timestamp verrà mostrato una o due ore prima in Polonia rispetto agli Stati Uniti (a seconda dell'ora legale). Questo rende il timestamp ideale per memorizzare e trasferire date tra fusi orari.