Skip to main content

Nanosecondi in data

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

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.