programing

Time Unit 열거를 사용하여 나노초를 초로 변환하려면 어떻게 해야 합니까?

goodsources 2022. 7. 31. 23:02
반응형

Time Unit 열거를 사용하여 나노초를 초로 변환하려면 어떻게 해야 합니까?

값을 나노초에서 초로 변환하려면 어떻게 해야 합니까?

코드 세그먼트는 다음과 같습니다.

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.

이것은 무엇을 의미합니까?

TimeUnit열거형

다음 식에서는 열거형(Java 5 이후)을 사용하여 나노초에서 초로 변환합니다.

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

그럼 백만으로 나누면 되겠네요

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

사용하시는 경우TimeUnit변환하려면 결과가 길기 때문에 소수점 정밀도는 떨어지지만 정수 정밀도는 유지됩니다.

TimeUnit은 열거형이므로 새 열거형을 만들 수 없습니다.

다음은 10000000000ns를 초수로 변환합니다.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

자세한 내용을 줄이기 위해 정적 가져오기를 사용할 수 있습니다.

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

-그러니까 타이프만 쳐주세요.

NANOSECONDS.toSeconds(elapsedTime);

다음과 같이 적어야 합니다.

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

변수에 endTime을 할당하면 몇 나노초가 발생할 수 있습니다.이 방법에서는 정확한 경과 시간을 얻을 수 있습니다.

그 후:

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

그러면 시간이 이중 형식으로 변환됩니다. 이중 형식은 정수 값보다 더 정확합니다.

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

java.time을 사용한 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--

Java 8또는Kotlin, 나는 사용하고 있습니다.Duration.ofNanos(1_000_000_000)맘에 들다

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를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/924208/how-to-convert-nanoseconds-to-seconds-using-the-timeunit-enum

반응형