TimeUnit Enum을 사용하여 나노 초를 초로 변환하는 방법은 무엇입니까?
문제
나노 초에서 초로 값을 변환하는 방법은 무엇입니까?
코드 세그먼트는 다음과 같습니다.
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.
이것은 무엇을 의미 하는가?
해결책
글쎄, 당신은 단지 1,000,000,000으로 나눌 수 있습니다.
long elapsedTime = end - start;
double seconds = (double)elapsedTime / 1_000_000_000.0;
사용하는 경우 TimeUnit
변환하려면 결과를 길게 얻을 수 있으므로 소수점 정밀도를 잃지 만 정밀한 정밀도를 유지합니다.
다른 팁
TimeUnit
열거적
다음 표현식은 TimeUnit
나노 초에서 초로 전환하기 위해 열거 (Java 5 이상) :
TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)
TimeUnit은 열거적이므로 새 제품을 만들 수 없습니다.
다음은 10000000000000N을 초로 변환합니다.
TimeUnit.NANOSECONDS.toSeconds(1000000000000L);
진실성을 줄이려면 정적 가져 오기를 사용할 수 있습니다.
import static java.util.concurrent.TimeUnit.NANOSECONDS;
-그리고 이후에 그냥 입력하십시오
NANOSECONDS.toSeconds(elapsedTime);
당신은 다음을 작성해야합니다 :
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
변수에 종료 시간을 할당하면 몇 나노초가 발생할 수 있습니다. 이 접근법에서는 정확한 경과 시간을 얻게됩니다.
그리고:
TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)
이렇게하면 시간을 이중 형식으로 몇 초로 변환되며 정수 값보다 정확합니다.
double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
제휴하지 않습니다 StackOverflow