153

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

这是代码段:

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.

这是什么意思?

4

8 回答 8

363

TimeUnit枚举

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

TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)
于 2009-05-29T03:01:20.967 回答
210

好吧,你可以除以 1,000,000,000:

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

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

于 2009-05-29T03:00:33.933 回答
58

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

以下将 1000000000000ns 转换为秒。

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);
于 2009-05-29T02:59:06.527 回答
22

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

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

- 从此只需键入

NANOSECONDS.toSeconds(elapsedTime);
于 2013-05-24T15:03:26.780 回答
7

你应该写:

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

在变量中分配 endTime 可能会导致几纳秒。在这种方法中,您将获得确切的经过时间。

进而:

TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)
于 2013-10-08T07:13:38.707 回答
4

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

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
于 2015-10-26T12:56:44.270 回答
1

JDK9 + 使用java.time.Duration的解决方案

Duration.ofNanos(1_000_000L).toSeconds()

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--

于 2020-04-09T12:02:56.380 回答
0

Java 8orKotlin中,我使用Duration.ofNanos(1_000_000_000)like

val duration = Duration.ofNanos(1_000_000_000)
logger.info(String.format("%d %02dm %02ds %03d",
                elapse, duration.toMinutes(), duration.toSeconds(), duration.toMillis()))

阅读更多https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html

于 2020-12-01T03:14:12.513 回答