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すると、結果が long として得られるため、10 進数の精度は失われますが、整数の精度は維持されます。

于 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 に答える
4

これは、整数値よりも正確な double 形式で時間を秒に変換します。

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

java.time.Durationを使用した JDK9 + ソリューション

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 に答える