transcurrido tomar tiempos tiempo segundos para nanosegundos medir imprimir ejecución ejecucion contador clase calcular algoritmo java

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);