Domanda

Come convertire un valore da nanosecondi a secondi?

Ecco il segmento di codice:

import java.io.*;
import java.util.concurrent.*; 
..

class Stamper { 

public static void main (String[] args) { 
long start = System.nanoTime(); 
//some try with nested loops 
long end = System.nanoTime(); 
long elapsedTime = end - start;

System.out.println("elapsed: " + elapsedTime + "nano seconds\n");

//convert to seconds 
TimeUnit seconds = new TimeUnit(); 
System.out.println("which is " + seconds.toSeconds(elapsedTime) + " seconds"); 
}}

L'errore è

Stamper.java:16:  enum types may not be instantiated.

Che cosa significa questo?

È stato utile?

Soluzione

Bene, si può solo dividere per 1000 milioni:

long elapsedTime = end - start;
double seconds = (double)elapsedTime / 1_000_000_000.0;

Se si utilizza TimeUnit convertire, si otterrà il risultato di un lungo, quindi si perde precisione decimale, ma mantengono numero intero di precisione.

Altri suggerimenti

TimeUnit Enum

La seguente espressione utilizza il TimeUnit enum (Java 5 e versioni successive) convertire da nanosecondi a secondi:

TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)

TIMEUNIT è un enum, quindi non è possibile crearne uno nuovo.

Di seguito convertirà 1000000000000ns di secondi.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

Per ridurre il livello di dettaglio, è possibile utilizzare una di importazione statica:

import static java.util.concurrent.TimeUnit.NANOSECONDS;

-e ora in poi basta digitare

NANOSECONDS.toSeconds(elapsedTime);

Si dovrebbe scrivere:

    long startTime = System.nanoTime();        
    long estimatedTime = System.nanoTime() - startTime;

Assegnazione del endTime in una variabile potrebbe causare pochi nanosecondi. In questo approccio si otterrà l'esatto tempo trascorso.

E poi:

TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)

Questo convertire un tempo di secondi in un doppio formato, che è più preciso di un valore intero:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top