Skip to main content
FastCalc

Nanosecondi in data

Converti i nanosecondi in una data leggibile. Inserisci il timestamp in nanosecondi (es. 1704067200000000000).

Calcolato nel tuo browser. Nulla di ciò che inserisci viene inviato.

Una marca temporale in nanosecondi perde in silenzio le ultime tre cifre dentro un numero JavaScript

I numeri di JavaScript tengono gli interi in modo esatto solo fino a 2⁵³ − 1. Una marca temporale attuale in nanosecondi vale circa 1,77 × 10¹⁸, cioè 196 volte quel limite. Passane una e 1770000000123456789 torna indietro come 1770000000123456800: nessun errore, nessun avviso, semplicemente tre cifre sostituite in silenzio.

Come funziona

  • Converte marche temporali in nanosecondi in date e viceversa, mantenendo la parte inferiore al millisecondo.
  • Segnala il limite di precisione, perché questo guasto è silenzioso e non rumoroso.
  • Gestisce la conversione in millisecondi che la maggior parte delle librerie di date richiede in ingresso.
nanosecondi ÷ 1.000.000 = millisecondi
nanosecondi ÷ 1.000.000.000 = secondi

MAX_SAFE_INTEGER = 9.007.199.254.740.991 (2⁵³ − 1)

in nanosecondi l'intero intervallo copre solo circa 104 giorni
in millisecondi copre circa 285.000 anni

Esempio pratico

Quanto copre ciascuna unità di tempo dentro l'intervallo degli interi sicuri e cosa accade superandolo.

  1. millisecondi: 2⁵³ copre circa 285.000 anni
  2. microsecondi: circa 285 anni
  3. nanosecondi: circa 0,285 anni, all'incirca 104 giorni
  4. 1770000000123456789 assegnato a un numero
  5. viene riletto come 1770000000123456800

Le ultime tre cifre sono cambiate e nulla l'ha segnalato. Una marca temporale in nanosecondi richiede BigInt o una stringa; tenerla in un numero ordinario non è un fastidio di arrotondamento ma la garanzia che qualsiasi dettaglio sotto il microsecondo sia finzione.

Come leggere il risultato

  • Usa BigInt per l'aritmetica in nanosecondi e converti in numero solo dopo aver diviso fino ai millisecondi. La divisione deve avvenire nello spazio BigInt: convertire prima e dividere dopo ha già distrutto le cifre che volevi conservare.
  • Database e formati di trasporto trasportano spesso i nanosecondi come stringhe esattamente per questo. Convertire una simile stringa in virgola mobile per «ripulirla» è il modo più comune di perdere la precisione, e accade nello strato che nessuno ispeziona.
  • L'oggetto Date di JavaScript è esso stesso basato sui millisecondi e non può affatto rappresentare tempi più fini. Convertire nanosecondi in un Date scarta il resto per costruzione, quindi lì la perdita è attesa e non un bug: la sorpresa è solo quando avviene in silenzio durante un calcolo.
  • La precisione al nanosecondo è raramente il requisito reale. Ordinamento dei log, tracciamento e profilazione richiedono di norma un ordine monotono più che un'accuratezza assoluta al nanosecondo, e un orologio monotono lo fornisce senza il problema di rappresentazione.

Domande frequenti

Perché la mia marca temporale è cambiata di qualche centinaio di nanosecondi?
È stata riposta in un numero in virgola mobile che non è in grado di rappresentarla. Oltre 2⁵³ − 1 gli interi vengono arrotondati al valore rappresentabile più vicino, quindi 1770000000123456789 diventa 1770000000123456800. Nulla solleva un errore perché è comportamento definito, non un difetto.
Come vanno conservate le marche temporali in nanosecondi?
Come BigInt in JavaScript, come intero a 64 bit nella maggior parte degli altri linguaggi, oppure come stringa quando si attraversa un confine come JSON. Converti in numero solo dopo aver diviso fino ai millisecondi e quando le cifre in più non servono più.

Guida alla precisione al nanosecondo

I nanosecondi sono la massima precisione temporale usata in informatica: un nanosecondo è un miliardesimo di secondo (10⁻⁹). Questo formato è usato da sistemi che richiedono precisione estrema, come database ad alte prestazioni, sistemi HFT (trading ad alta frequenza) o kernel di sistemi operativi per il profiling preciso.

Applicazioni che richiedono nanosecondi

La precisione al nanosecondo è essenziale: nei mercati finanziari, dove una differenza di nanosecondi può valere milioni di profitto o perdita; in database come Cassandra e Druid per l'indicizzazione precisa degli eventi; nei sistemi di telecomunicazione che sincronizzano la trasmissione dei dati; e nelle misurazioni scientifiche e nei laboratori di fisica delle particelle.

Limiti hardware

La maggior parte dei processori lavora nell'ordine dei GHz (ad esempio 3 GHz = 3 miliardi di cicli al secondo), ma un accesso alla memoria richiede decine di nanosecondi e anche l'Ethernet più veloce aggiunge ritardi dell'ordine dei microsecondi. In pratica, la precisione al nanosecondo conta soprattutto per le misurazioni interne alla CPU e per hardware specializzato.

Conversione e formati

Ricorda le conversioni: 1 secondo = 10⁹ nanosecondi, 1 millisecondo = 10⁶ nanosecondi, 1 microsecondo = 10³ nanosecondi. I numeri molto grandi possono causare overflow nei linguaggi di programmazione: usa BigInt in JavaScript o tipi a 64 bit dove possibile.