Comment convertir nanosecondes à quelques secondes en utilisant le enum TimeUnit?

StackOverflow https://stackoverflow.com/questions/924208

  •  06-09-2019
  •  | 
  •  

Question

Comment convertir une valeur de nanosecondes à quelques secondes?

Voici le segment de code:

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'erreur est

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

Qu'est-ce que cela signifie?

Était-ce utile?

La solution

Eh bien, vous pouvez simplement diviser par 1000000000:

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

Si vous utilisez TimeUnit pour convertir, vous obtiendrez votre résultat comme une longue, de sorte que vous perdrez la précision décimale, mais maintenir la précision de nombre entier.

Autres conseils

TimeUnit Enum

L'expression suivante utilise le TimeUnit ENUM (Java 5 et versions ultérieures) pour convertir nanosecondes à quelques secondes:

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

TimeUnit est un ENUM, de sorte que vous ne pouvez pas créer un nouveau.

Les éléments suivants convertira 1000000000000ns en secondes.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

Pour réduire verbosité, vous pouvez utiliser une importation statique:

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

-et désormais il suffit de taper

NANOSECONDS.toSeconds(elapsedTime);

Vous devriez écrire:

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

Affectation du endTime dans une variable peut causer quelques nanosecondes. Dans cette approche, vous obtiendrez exactement le temps écoulé.

Et puis:

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

Cela va convertir un temps en secondes dans un format double, ce qui est plus précise qu'une valeur entière:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top