Esistono diversi tipi di fonti di tempo e tempo.
-
L'ora locale, calcolata con una differenza di fuso orario dall'ora di sistema. L'ora locale è ciò che gli utenti si aspettano di vedere quando guardano un orologio. Purtroppo, i fusi orari presentano molti bagagli indesiderati. L'ora locale è ambigua se il fuso orario non è specificato. Inoltre, alcuni punti temporali vengono saltati o ripetuti quando l'orologio si sposta tra fusi orari, perché il sistema si muove fisicamente tra fusi orari o a causa dell'ora legale. Mentre l'ora locale può essere utilizzata per i timestamp purché sia incluso il fuso orario, tale registro potrebbe non essere intuitivo poiché i tempi visualizzati si spostano avanti e indietro.
-
L'ora del sistema in UTC (chiamata in modo confuso GMT nelle API precedenti). L'ora del sistema è l'ora del calendario che il computer pensa di avere, senza alcun fuso orario applicato. Questo elimina i problemi relativi al fuso orario, ma non è affidabile per tutti gli scopi. In particolare, gli utenti possono impostare un orario di sistema specifico. Ciò significa che potrebbero esserci salti improvvisi avanti e indietro: questa volta non è monotono .
Per i sistemi in tempo reale, ci sono anche alcune complicazioni come un secondo del tempo di sistema non necessariamente lungo un secondo. Il tempo di sistema può rallentare se è in anticipo rispetto all'ora NTP o accelerare se il tempo di sistema è in ritardo. Alcuni sistemi richiedono anche che ogni minuto sia esattamente lungo 60 secondi. Tali sistemi potrebbero distribuire l'effetto del salto di secondi nell'arco di un giorno intero.
Il tempo di sistema impostato dipende. Potrebbe essere inizializzato da input dell'utente o NTP o un orologio hardware in tempo reale, potrebbe andare avanti attraverso interrupt della CPU o un orologio hardware e potrebbe essere regolato dall'input dell'utente o dall'NTP.
AFAIK, tutti i moderni sistemi operativi dei consumatori hanno la possibilità di sincronizzare l'ora del proprio sistema con NTP o tramite il servizio cellulare, regolarmente o all'avvio. Tutti gli attuali dispositivi informatici del consumatore contengono un orologio in tempo reale alimentato a batteria che manterrà il tempo per più anni anche quando il dispositivo è spento.
-
Un tempo monotono o costante. Questa volta non si muove mai all'indietro e si muove sempre alla stessa velocità. Una possibile implementazione monotona del tempo potrebbe contare i secondi da quando il sistema è stato avviato, o da qualche altro punto di riferimento. Poiché quel punto di riferimento è arbitrario, un punto temporale assoluto non può essere correlato all'ora del calendario. Tuttavia, le differenze dei punti temporali monotoni possono essere utilizzate per misurare correttamente le durate.
Probabilmente il log dovrebbe usare l'ora del sistema. Sì, non è garantito che sia corretto, ma renderlo errato implicherebbe in genere un'interferenza dell'utente attiva. Cercare di essere migliore in termini di tempo rispetto al tuo sistema operativo sarà difficile.
Se non ti puoi fidare dell'origine del tempo del dispositivo (ad esempio perché i timestamp vengono utilizzati per verificare o eseguire contratti), non utilizzare quel dispositivo. Il modo in cui questo può essere risolto dipende molto dalla natura precisa della tua applicazione, ad esempio potrebbe essere meglio mantenere un server affidabile che autentica i timestamp.