Le migliori pratiche per l'utilizzo del tempo

3

Sto creando un'app finanziaria basata su desktop in Ruby On Rails per il mio amico. Ho un po 'di preoccupazione per il tempo di sistema che sto usando dal momento che il registro temporale è molto importante. Cosa succede se l'ora del sistema cambia a causa di alcuni problemi hardware. Devo andare per tempo da internet o quali sono le alternative per questo problema?

    
posta InQusitive 10.12.2016 - 11:57
fonte

3 risposte

2

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.

    
risposta data 10.12.2016 - 13:57
fonte
2

Se la precisione desiderata viene misurata solo in millisecondi come per il trading manuale, usa NTP, se hai bisogno di micros o nanos come in algo-trading, quindi utilizza il protocollo IEEE 1588 Precision Time.

    
risposta data 13.12.2016 - 08:38
fonte
0

Avrei semplicemente avuto la sincronizzazione dell'ora NTP nel tuo caso. Questo devierà solo per pochi secondi al giorno e per il tuo commento ti servirà solo una precisione su scala oraria.

Se si dispone di una funzione di registrazione generale, è necessario utilizzare UTC per il timestamp. Quando leggi il timestamp puoi convertirlo all'ora locale per il timestamp a tuo piacimento. Quando si usano altri sistemi temporali, si corre sempre il rischio di avere tempi duplicati (l'ora si sovrappone tra l'estate e l'inverno purché non ci liberiamo di questa procedura ridicola).

    
risposta data 10.12.2016 - 14:44
fonte

Leggi altre domande sui tag