tomar - tiempo en nanosegundos java
¿Cómo convertir nanosegundos a segundos usando la enumeración TimeUnit? (6)
¿Cómo convertir un valor de nanosegundos a segundos?
Aquí está el segmento del 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?
TimeUnit
Enum
La siguiente expresión usa la enumeración TimeUnit
(Java 5 y posterior) para convertir de nanosegundos a segundos:
TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)
Bueno, podrías dividir por 1,000,000,000:
long elapsedTime = end - start;
double seconds = (double)elapsedTime / 1000000000.0;
Si usa TimeUnit
para convertir, obtendrá un resultado largo, por lo que perderá precisión decimal pero mantendrá la precisión del número entero.
Deberías escribir :
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
Asignar endTime a una variable puede causar algunos nanosegundos. En este enfoque obtendrá el tiempo exacto transcurrido.
Y entonces:
TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)
Esto convertirá un tiempo a segundos en un formato doble, que es más preciso que un valor entero:
double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Para reducir la verbosidad, puede usar una importación estática:
import static java.util.concurrent.TimeUnit.NANOSECONDS;
- y de ahora en adelante simplemente escriba
NANOSECONDS.toSeconds(elapsedTime);
TimeUnit es una enumeración, por lo que no puedes crear una nueva.
Lo siguiente convertirá 1000000000000ns a segundos.
TimeUnit.NANOSECONDS.toSeconds(1000000000000L);