¿Cómo convertir un valor de nanosegundos a segundos?
Aquí está el segmento de código:
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");
}}
El error es
Stamper.java:16: enum types may not be instantiated.
¿Qué significa esto?
TimeUtil
, porque es unenum
(enumerador). Si desea usarTimeUnit
, debe usarTimeUnit.NANOSECONDS.toSeconds(elapsedTime)
en su lugar. ¡Buena suerte!Respuestas:
Bueno, podrías dividir entre 1,000,000,000:
Si usa
TimeUnit
para convertir, obtendrá su resultado como un largo, por lo que perderá la precisión decimal pero mantendrá la precisión del número entero.fuente
convert()
ytoFoo()
todos los métodos devuelvenlong
ahora docs.oracle.com/javase/6/docs/api/java/util/concurrent/…TimeUnit
solución resulta en una pérdida de especificidad.TimeUnit.SECONDS.convert(500, TimeUnit.MILLISECONDS);
Volveremos0
, no0.5
. Simplemente depende de su caso de uso cuál de estos es preferible.double seconds = ((double) nanoseconds) / 1E9;
haría esto cada vez como una preferencia personal.TimeUnit
EnumLa siguiente expresión usa la
TimeUnit
enumeración (Java 5 y posterior) para convertir de nanosegundos a segundos:fuente
TimeUnit es una enumeración, por lo que no puede crear una nueva.
Lo siguiente convertirá 1000000000000ns a segundos.
fuente
Para reducir la verbosidad, puede usar una importación estática:
-y en adelante solo escriba
fuente
Deberías escribir :
Asignar el endTime en una variable puede causar unos pocos nanosegundos. En este enfoque, obtendrá el tiempo transcurrido exacto.
Y entonces:
fuente
Esto convertirá un tiempo a segundos en un formato doble, que es más preciso que un valor entero:
fuente
Solución JDK9 + usando 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--
fuente