Cómo convertir nanosegundos a segundos utilizando la enumeración TimeUnit?

StackOverflow https://stackoverflow.com/questions/924208

  •  06-09-2019
  •  | 
  •  

Pregunta

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?

¿Fue útil?

Solución

Bueno, usted podría dividir por mil millones:

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

Si utiliza TimeUnit para convertir, obtendrá su resultado como mucho, por lo que si no se pierden precisión decimal, pero mantener la precisión número entero.

Otros consejos

TimeUnit Enum

La siguiente expresión utiliza el TimeUnit enum (Java 5 y ss) para convertir de nanosegundos a segundos:

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

TimeUnit es una enumeración, por lo que no se puede crear una nueva.

El siguiente será convertir a 1000000000000ns segundos.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

Para reducir el nivel de detalle, se puede utilizar una importación estática:

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

-y ahora en adelante sólo tiene que escribir

NANOSECONDS.toSeconds(elapsedTime);

Usted debe escribir:

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

La asignación de los tiempos del fin en una variable podría causar unos pocos nanosegundos. En este enfoque obtendrá el tiempo transcurrido exacto.

Y a continuación:

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

Esto convertirá un tiempo de segundos en un formato doble, que es más preciso que un valor entero:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top