Comment convertir une valeur de nanosecondes en 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 ça veut dire?
TimeUtil
, car il s'agit d'unenum
(énumérateur). Si vous souhaitez utiliserTimeUnit
, vous devez utiliser à laTimeUnit.NANOSECONDS.toSeconds(elapsedTime)
place. Bonne chance!Réponses:
Eh bien, vous pouvez simplement diviser par 1 000 000 000:
Si vous utilisez
TimeUnit
pour convertir, vous obtiendrez votre résultat sous forme de long, vous perdrez donc la précision décimale tout en conservant la précision des nombres entiers.la source
convert()
et lestoFoo()
méthodes retournent touteslong
maintenant docs.oracle.com/javase/6/docs/api/java/util/concurrentTimeUnit
solution se traduit par une perte de spécificité.TimeUnit.SECONDS.convert(500, TimeUnit.MILLISECONDS);
reviendra0
, non0.5
. Cela dépend simplement de votre cas d'utilisation, lequel de ceux-ci est préférable.double seconds = ((double) nanoseconds) / 1E9;
je le ferais à chaque fois par préférence personnelle.TimeUnit
EnumL'expression suivante utilise l'
TimeUnit
énumération (Java 5 et versions ultérieures) pour convertir des nanosecondes en secondes:la source
TimeUnit est une énumération, vous ne pouvez donc pas en créer une nouvelle.
Ce qui suit convertira 1000000000000ns en secondes.
la source
Pour réduire la verbosité, vous pouvez utiliser une importation statique:
-et désormais tapez simplement
la source
Vous devriez écrire:
L'affectation de endTime dans une variable peut entraîner quelques nanosecondes. Dans cette approche, vous obtiendrez le temps écoulé exact.
Puis:
la source
Cela convertira une heure en secondes dans un format double, qui est plus précis qu'une valeur entière:
la source
Solution JDK9 + utilisant 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--
la source