data e ora di oggi

data e ora di oggi

Ho visto un'azienda di logistica perdere quarantamila euro in una sola notte perché un programmatore senior ha dato per scontato che il server e il client avessero la stessa percezione di Data e Ora di Oggi. Non è stato un errore da dilettante, ma un classico caso di eccessiva sicurezza. Avevano pianificato una serie di spedizioni internazionali automatizzate basandosi sul tempo locale del database, senza considerare che i sensori IoT sui camion stavano trasmettendo dati con un timestamp diverso. Risultato? I cancelli dei magazzini in Polonia non si sono aperti perché il sistema centrale pensava che mancassero ancora due ore all'appuntamento. I camionisti sono rimasti bloccati, le penali per il ritardo sono scattate all'istante e il supporto tecnico ha passato il weekend a riscrivere migliaia di righe di log sporchi. Questo succede quando tratti il tempo come una stringa di testo invece che come una coordinata geografica e fisica complessa. Se pensi che basti chiamare una funzione predefinita nel tuo linguaggio di programmazione preferito per gestire il problema, sei già sulla strada giusta per un disastro costoso.

L'illusione della semplicità in Data e Ora di Oggi

Il primo errore che vedo ripetere costantemente è trattare il momento presente come un dato statico. Molti sviluppatori e manager pensano che Data e Ora di Oggi sia un concetto universale, ma in realtà è un'astrazione che cambia a seconda di chi la guarda. Quando scrivi codice che salva il tempo attuale, la maggior parte delle persone usa il formato locale del server. È una trappola mortale. Se il tuo server è a Milano e il tuo utente è a New York, il "momento" in cui l'ordine viene effettuato diventa ambiguo se non specifichi l'offset.

Ho lavorato con una startup fintech che ha quasi chiuso i battenti per questo motivo. Registravano le transazioni usando il tempo locale della loro istanza cloud in Irlanda. Quando hanno dovuto produrre dei report fiscali per le autorità italiane, i conti non tornavano mai per le operazioni avvenute intorno alla mezzanotte. Centinaia di transazioni finivano nel giorno sbagliato a causa di quell'ora di differenza. Non si tratta di un bug teorico, ma di una discrepanza legale che può portare a multe salatissime. La soluzione non è "aggiungere un'ora" manualmente ogni volta che leggi il dato, ma adottare lo standard UTC (Coordinated Universal Time) come unica fonte di verità per l'archiviazione. Qualsiasi altra scelta è un debito tecnico che pagherai con gli interessi.

Pensare che le librerie standard siano infallibili

C'è questa idea sbagliata che basti usare una libreria famosa per essere al sicuro. Non è così. Le librerie gestiscono il calcolo matematico del tempo, ma non sanno nulla del contesto del tuo business. Prendi il caso dei passaggi all'ora legale. Molti sistemi falliscono miseramente due volte l'anno perché non sanno gestire l'ora "fantasma" che non esiste o l'ora che si ripete. Se hai un abbonamento che scade alle 02:30 del mattino proprio nella notte del cambio d'ora, il tuo sistema potrebbe bloccare l'accesso a un utente pagante o, peggio, addebitargli il costo due volte.

Dalla mia esperienza, il modo corretto di affrontare la questione non è affidarsi ciecamente a DateTime.Now() o funzioni simili. Devi separare la logica di archiviazione dalla logica di visualizzazione. Nel database deve finire solo un numero intero (timestamp) o una stringa ISO 8601 con offset UTC esplicito. Solo quando il dato deve essere mostrato a un essere umano, lo trasformi nella sua versione locale. Ho visto team perdere settimane a cercare di convertire date già "formattate" per il display in calcoli logici, finendo per creare un pasticcio di fusi orari sovrapposti che nessuno era più in grado di decifrare.

Il disastro dei fusi orari salvati come stringhe

Un errore che definirei quasi criminale è salvare il nome del fuso orario come una stringa tipo "CET" o "PST". È un approccio che ignora completamente la geopolitica. I governi cambiano le regole del tempo più spesso di quanto pensi. La Turchia, per esempio, ha deciso di abolire il cambio d'ora legale qualche anno fa con un preavviso brevissimo. Se il tuo sistema si basava su regole statiche o su abbreviazioni ambigue, hai smesso di funzionare correttamente dall'oggi al domani.

L'approccio corretto richiede l'uso del database IANA (Internet Assigned Numbers Authority), che identifica i fusi orari in base alla località geografica, come "Europe/Rome". Questo perché "Europe/Rome" non è solo un offset di +1 o +2 rispetto a Londra, ma è una cronologia completa di tutti i cambiamenti avvenuti in quella zona dal 1970 a oggi. Senza questo livello di dettaglio, i tuoi calcoli storici saranno sempre sbagliati. Se devi calcolare quanto tempo è passato tra una fattura emessa nel 1995 e una di ieri, non puoi usare una formula matematica semplice. Devi usare un database che conosca i cambiamenti legislativi avvenuti in quegli anni.

Il mito dell'ora atomica perfetta

Molti credono che avere un server sincronizzato con il protocollo NTP (Network Time Protocol) risolva ogni problema. È un'altra mezza verità. NTP può fallire. I server possono subire il fenomeno del "clock drift", dove l'orologio interno si sposta di qualche millisecondo o secondo ogni giorno. In un sistema distribuito, dove hai dieci server che lavorano insieme, anche una differenza di 50 millisecondi può causare problemi di concorrenza nei database. Ho visto sistemi di trading perdere sequenzialità nelle operazioni perché il server A pensava di aver ricevuto un ordine prima del server B, quando in realtà era il contrario. La sincronizzazione perfetta non esiste; esiste solo la gestione intelligente dell'incertezza.

Scenario reale: come distruggere un sistema di prenotazioni

Immaginiamo una catena di hotel che gestisce prenotazioni internazionali. Ecco come appare l'approccio sbagliato rispetto a quello professionale.

Prima (L'approccio ingenuo): Il sistema riceve una prenotazione da un utente a Tokyo per una stanza a Roma. Il server salva nel database: 2026-05-20 14:00:00. Quando l'hotel a Roma apre la lista degli arrivi, vede le 14:00. Sembra funzionare, finché l'utente non prova a modificare la prenotazione dal suo cellulare in Giappone. Il sistema vede che a Tokyo sono già le 21:00 del 20 maggio (perché il server non ha registrato il fuso della struttura) e nega la modifica perché "la data è passata". L'utente è furioso, l'hotel perde la vendita e il servizio clienti deve gestire una chiamata transatlantica per un errore di codice.

Dopo (L'approccio professionale): Il sistema riceve la stessa prenotazione. Salva nel database tre informazioni distinte: l'istante preciso in UTC (2026-05-20T12:00:00Z), il fuso orario locale della struttura (Europe/Rome) e la percezione temporale dell'utente al momento dell'acquisto. Quando l'utente a Tokyo apre l'app, il sistema calcola la differenza tra il suo tempo attuale e l'istante UTC salvato, indipendentemente da dove si trovi fisicamente il server. Quando l'hotel a Roma visualizza la lista, il sistema applica le regole del fuso orario "Europe/Rome" all'istante UTC. Se la politica del fuso cambia per legge, basta aggiornare il database IANA del sistema e tutte le prenotazioni passate, presenti e future rimangono corrette.

Gestire la precisione di Data e Ora di Oggi nei log

Spesso si sottovaluta l'importanza del formato dei log finché non succede un disastro. Ho partecipato a un'analisi post-mortem per un attacco informatico dove i log erano inutilizzabili. Alcuni server loggavano in formato europeo (DD/MM/YYYY), altri in formato americano (MM/DD/YYYY) e altri ancora non includevano l'anno. Ricostruire la sequenza degli eventi è stato un incubo che è costato tre settimane di lavoro straordinario a un intero team di sicurezza.

L'unico modo accettabile per gestire i timestamp nei log è il formato ISO 8601 ad alta precisione (millisecondi o microsecondi) sempre in UTC. Non importa se i tuoi uffici sono a Napoli o a Berlino. Se i tuoi log dicono 2026-04-29T21:37:53.456Z, chiunque nel mondo saprà esattamente quando è successo l'evento senza dover fare calcoli mentali o controllare la configurazione del sistema operativo di quella specifica macchina. È una disciplina che sembra noiosa ma che ti salva la carriera quando devi spiegare a un cliente perché il suo database è andato in crash.

L'errore del calcolo manuale della durata

C'è una tendenza pericolosa a calcolare la durata tra due momenti facendo una semplice sottrazione tra timestamp. "Basta sottrarre il valore A dal valore B e dividere per 86400 per avere i giorni", dicono. No. Non farlo mai. I giorni non durano sempre 86400 secondi. Esistono i secondi intercalari (leap seconds), i cambi d'ora e le variazioni storiche dei calendari.

Se usi la sottrazione manuale per gestire scadenze contrattuali o pagamenti, prima o poi sbaglierai di un giorno intero. Ho visto contratti assicurativi scadere prematuramente perché il calcolo non teneva conto dell'anno bisestile in modo corretto. Le librerie di gestione temporale moderne hanno funzioni specifiche per aggiungere o sottrarre intervalli che tengono conto di tutte queste variabili. Usale. Non cercare di essere più furbo di decenni di ingegneria informatica accumulata. Ogni volta che scrivi + (24 * 60 * 60), stai inserendo un potenziale bug nel tuo codice.

💡 Potrebbe interessarti: essiccatore filamento 3d fai da te

Controllo della realtà

Smetti di cercare la soluzione rapida. Non esiste un plugin o un framework che risolva la complessità del tempo senza che tu debba capirne le fondamenta. Gestire correttamente Data e Ora di Oggi richiede una disciplina quasi maniacale e l'accettazione di una verità scomoda: il tempo è un'opinione politica e geografica, non una costante fisica nel mondo dell'informatica.

Se non sei disposto a standardizzare tutto su UTC, a usare i nomi dei fusi orari IANA invece delle sigle e a testare il tuo sistema simulando cambi d'ora e anni bisestili, i tuoi dati diventeranno spazzatura. Non è una questione di "se" accadrà, ma di "quando". Ho visto carriere brillanti incagliarsi su bug temporali banali perché non avevano avuto la pazienza di impostare correttamente le basi. La buona notizia è che, una volta adottato il rigore necessario, il 99% di questi problemi scompare. Ma quel rigore deve partire da te, ora, prima che il prossimo log ambiguo ti costi il posto o il cliente.

MR

Matteo Rizzo

Con esperienza tra newsroom e progetti editoriali, Matteo Rizzo propone contenuti chiari, utili e ben documentati.