如何使用TimeUnit枚举将纳秒转换为秒?

如何将一个值从纳秒转换为秒?

以下是代码段:

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

错误是

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

这是什么意思?

那么,你可以分成十亿:

 long elapsedTime = end - start; double seconds = (double)elapsedTime / 1000000000.0; 

如果你使用TimeUnit进行转换,你会得到你的结果很长,所以你会失去小数精度,但保持整数精度。

TimeUnit枚举

以下expression式使用TimeUnit枚举(Java 5及更高版本)将纳秒转换为秒:

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

TimeUnit是一个枚举,所以你不能创build一个新的。

以下将转换10000000000ns到秒。

 TimeUnit.NANOSECONDS.toSeconds(1000000000000L); 

为了减less冗长,可以使用静态导入:

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

从今以后只是types

 NANOSECONDS.toSeconds(elapsedTime); 

你应该写:

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

在variables中分配endTime可能会导致几个纳秒。 在这种方法中,你会得到确切的时间。

接着:

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

这将以double格式将时间转换为秒,这比整数值更精确:

 double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;