146 votos

¿Cómo convertir los nanosegundos a segundos usando la enumeración TimeUnit?

¿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(); 
//alguna prueba con bucles anidados 
long end = System.nanoTime(); 
long elapsedTime = end - start;

System.out.println("elapsed: " + elapsedTime + "nanosegundos\n");

//convertir a segundos 
TimeUnit seconds = new TimeUnit(); 
System.out.println("que es " + seconds.toSeconds(elapsedTime) + " segundos"); 
}}

El error es

Stamper.java:16: los tipos de enumeración no pueden ser instanciados.

¿Qué significa esto?

356voto

pythonquick Puntos 4314

Enumeración TimeUnit

La siguiente expresión utiliza la enumeración TimeUnit (Java 5 y posterior) para convertir de nanosegundos a segundos:

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

201voto

Adam Rosenfield Puntos 176408

Bueno, simplemente podrías dividir por 1,000,000,000:

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

Si usas TimeUnit para convertir, obtendrás tu resultado como un long, por lo que perderás precisión decimal pero mantendrás la precisión del número entero.

58voto

Nick Veys Puntos 8638

TimeUnit es un enum, por lo que no puedes crear uno nuevo.

Lo siguiente convertirá 1000000000000ns a segundos.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

22voto

Zoltán Puntos 2915

Para reducir la verbosidad, puedes usar una importación estática:

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

-y de ahora en adelante solo escribe

NANOSECONDS.toSeconds(elapsedTime);

6voto

Debes escribir :

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

Asignar el endTime a una variable podría causar unos pocos nanosegundos. Con este enfoque obtendrás el tiempo transcurrido exacto.

Y luego:

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X