Frage

Wie man einen Wert von Nanosekunden bis Sekunden konvertieren?

Hier ist das Code-Segment:

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"); 
}}

Der Fehler ist

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

Was bedeutet das?

War es hilfreich?

Lösung

Nun, Sie könnten nur teilen, indem er 1000000000:

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

Wenn Sie TimeUnit verwenden zu konvertieren, werden Sie Ihr Ergebnis als lange erhalten, so dass Sie Dezimalgenauigkeit verlieren, aber ganze Zahl Präzision beibehalten.

Andere Tipps

TimeUnit Enum

Der folgende Ausdruck verwendet das TimeUnit enum (Java 5 und höher) von Nanosekunden bis Sekunden zu konvertieren:

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

Timeunit ist eine Enumeration, so dass Sie nicht einen neuen erstellen können.

Im Folgenden wird 1000000000000ns auf Sekunden konvertieren.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

Zur Reduzierung der Ausführlichkeit, können Sie einen statischen Import verwenden:

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

-und von nun an nur geben

NANOSECONDS.toSeconds(elapsedTime);

Sie sollten schreiben:

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

Zuweisen des endTime in einer Variablen kann ein paar Nanosekunden verursachen. Bei diesem Ansatz werden Sie die genaue verstrichene Zeit.

Und dann:

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

Dies wird eine Zeit bis Sekunden in einem Doppelformat konvertieren, das als ein ganzzahliger Wert präziser ist:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top