Pergunta

Como converter um valor de nanossegundos para segundos?

Aqui está o 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"); 
}}

O erro é

Stamper.java:16:  enum types may not be instantiated.

O que isso significa?

Foi útil?

Solução

Bem, você poderia simplesmente dividir por 1.000 milhões:

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

Se você usar TimeUnit para converter, você vai obter o resultado como uma longa, então você vai perder precisão decimal, mas manter a precisão número inteiro.

Outras dicas

TimeUnit Enum

A expressão a seguir usa o TimeUnit enum (Java 5 e posterior) converter de nanossegundos para segundos:

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

TimeUnit é uma enumeração, então você não pode criar um novo.

A seguir irá converter 1000000000000ns de segundos.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

Para reduzir a verbosidade, você pode usar uma importação estática:

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

-e daí em diante basta digitar

NANOSECONDS.toSeconds(elapsedTime);

Você deve escrever:

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

Atribuição do endTime em uma variável pode causar alguns nanossegundos. Nesta abordagem, você vai ter o tempo exato decorrido.

E, em seguida:

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

Isto irá converter uma hora de segundos em um formato duplo, que é mais preciso do que um valor inteiro:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top