Hoe converteer je een waarde van nanoseconden naar seconden?
Dit is het 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");
}}
De fout is
Stamper.java:16: enum types may not be instantiated.
Wat betekent dit?
Antwoord 1, autoriteit 100%
Nou, je kunt gewoon delen door 1.000.000.000:
long elapsedTime = end - start;
double seconds = (double)elapsedTime / 1_000_000_000.0;
Als u TimeUnit
gebruikt om te converteren, krijgt u uw resultaat als een long, zodat u de decimale precisie verliest, maar de precisie van hele getallen behoudt.
Antwoord 2, autoriteit 98%
TimeUnit
Enum
De volgende uitdrukking gebruikt de TimeUnit
enum (Java 5 en later) om te converteren van nanoseconden naar seconden:
TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)
Antwoord 3, autoriteit 28%
TimeUnit is een opsomming, dus u kunt geen nieuwe aanmaken.
Het volgende zet 1000000000000ns om in seconden.
TimeUnit.NANOSECONDS.toSeconds(1000000000000L);
Antwoord 4, autoriteit 11%
Om breedsprakigheid te verminderen, kunt u een statische import gebruiken:
import static java.util.concurrent.TimeUnit.NANOSECONDS;
-en typ voortaan gewoon
NANOSECONDS.toSeconds(elapsedTime);
Antwoord 5, autoriteit 3%
Je moet schrijven:
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
Het toewijzen van de eindtijd in een variabele kan enkele nanoseconden veroorzaken. In deze aanpak krijgt u de exacte verstreken tijd.
En dan:
TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)
Antwoord 6, autoriteit 2%
Dit converteert een tijd naar seconden in een dubbel formaat, wat nauwkeuriger is dan een geheel getal:
double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Antwoord 7
JDK9+ oplossing met java.time.Duration
Duration.ofNanos(1_000_000L).toSeconds()
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–
Antwoord 8
In Java 8
of Kotlin
gebruik ik Duration.ofNanos(1_000_000_000)
zoals
val duration = Duration.ofNanos(1_000_000_000)
logger.info(String.format("%d %02dm %02ds %03d",
elapse, duration.toMinutes(), duration.toSeconds(), duration.toMillis()))
Lees meer https://docs.oracle .com/javase/8/docs/api/java/time/Duration.html