Wie konvertiere ich einen Wert von Nanosekunden in Sekunden?
Hier ist das Codesegment:
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?
TimeUtil
, da es sich um einenenum
(Enumerator) handelt. Wenn Sie verwenden möchtenTimeUnit
, sollten SieTimeUnit.NANOSECONDS.toSeconds(elapsedTime)
stattdessen verwenden. Viel Glück!Antworten:
Nun, Sie könnten einfach durch 1.000.000.000 teilen:
Wenn Sie
TimeUnit
zum Konvertieren verwenden, erhalten Sie Ihr Ergebnis als Long, sodass Sie die Dezimalgenauigkeit verlieren, aber die Genauigkeit der ganzen Zahl beibehalten.quelle
convert()
undtoFoo()
alle Methoden gebenlong
s jetzt zurück docs.oracle.com/javase/6/docs/api/java/util/concurrent/…TimeUnit
Lösung zu einem Verlust an Spezifität führt.TimeUnit.SECONDS.convert(500, TimeUnit.MILLISECONDS);
wird zurückkehren0
, nicht0.5
. Es hängt einfach von Ihrem Anwendungsfall ab, welcher davon vorzuziehen ist.double seconds = ((double) nanoseconds) / 1E9;
Ich würde dies jedes Mal als persönliche Präferenz tun.TimeUnit
AufzählungDer folgende Ausdruck verwendet die
TimeUnit
Aufzählung (Java 5 und höher), um von Nanosekunden in Sekunden zu konvertieren:quelle
TimeUnit ist eine Aufzählung, daher können Sie keine neue erstellen.
Im Folgenden werden 1000000000000ns in Sekunden konvertiert.
quelle
Um die Ausführlichkeit zu verringern, können Sie einen statischen Import verwenden:
-und fortan nur noch tippen
quelle
Sie sollten schreiben:
Das Zuweisen der endTime in einer Variablen kann einige Nanosekunden verursachen. Bei diesem Ansatz erhalten Sie die genaue verstrichene Zeit.
Und dann:
quelle
Dadurch wird eine Zeit in Sekunden in ein Doppelformat konvertiert, das genauer ist als ein ganzzahliger Wert:
quelle
JDK9 + -Lösung mit java.time.Duration
https://docs.oracle.com/javase/9/docs/api/java/time/Duration.html#ofNanos-long-
https://docs.oracle.com/javase/9/docs/api/java/time/Duration.html#toSeconds--
quelle