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 isto significa?
TimeUtil
, porque é umenum
(enumerador). Se você deseja usarTimeUnit
, você deve usá-loTimeUnit.NANOSECONDS.toSeconds(elapsedTime)
. Boa sorte!Respostas:
Bem, você pode dividir por 1.000.000.000:
Se você usar
TimeUnit
a conversão, obterá o resultado por muito tempo, perdendo a precisão decimal, mas mantendo a precisão do número inteiro.fonte
convert()
etoFoo()
todos os métodos retornamlong
agora. Docs.oracle.com/javase/6/docs/api/java/util/concurrent/…TimeUnit
solução resulta em uma perda de especificidade.TimeUnit.SECONDS.convert(500, TimeUnit.MILLISECONDS);
retornará0
, não0.5
. Simplesmente depende do seu caso de uso qual deles é preferível.double seconds = ((double) nanoseconds) / 1E9;
eu faria isso toda vez como uma preferência pessoal.TimeUnit
EnumA expressão a seguir usa a
TimeUnit
enumeração (Java 5 e posterior) para converter de nanossegundos para segundos:fonte
TimeUnit é uma enumeração, portanto você não pode criar uma nova.
A seguir, converteremos 1000000000000ns em segundos.
fonte
Para reduzir a verbosidade, você pode usar uma importação estática:
-e doravante apenas digite
fonte
Você deve escrever:
Atribuir o endTime a uma variável pode causar alguns nanossegundos. Nesta abordagem, você obterá o tempo decorrido exato.
E depois:
fonte
Isso converterá um tempo para segundos em um formato duplo, mais preciso que um valor inteiro:
fonte
Solução JDK9 + usando java.time.Duration
https://docs.oracle.com/javase/9/docs/api/java/time/Duration.html#ofNanos-long-
https://docs.oracle.com/javase/9/docs/api/java/time/Duration.html#toSeconds--
fonte