2009-05-29 3 views
119

값을 나노초에서 초로 변환하는 방법은 무엇입니까?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. 

입니다 :

다음 코드 세그먼트이다?

+0

오류는 당신이를 인스턴스화 할 수 없음을 의미합니다 그것은'enum' (열거 자)이기 때문에'TimeUtil'을 입력하십시오. 'TimeUnit'을 사용하려면 대신'TimeUnit.NANOSECONDS.toSeconds (elapsedTime)'를 사용해야합니다. 행운을 빕니다! –

답변

171

글쎄, 당신은 1,000,000,000으로 나눌 수있다 : 당신이 변환 TimeUnit를 사용하는 경우, 당신은 오래로 결과를 얻을 수 있습니다

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

, 당신은 소수점 정밀도를 잃고 있지만, 전체 유지 수 있습니다 있도록 번호 정밀도.

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

대부분의 경우 이것이 최선의 해결책이라고 생각합니다. 그것은 확실히 더 빨리 읽을 수 있습니다. –

+0

저는 1000000000을 double로 변경하여 double precision division을 강제합니다. –

+2

1000000000.0은 이미 두 배입니다. float 상수는 1000000000.0f가됩니다. –

52

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

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

TimeUnit.NANOSECONDS.toSeconds(1000000000000L); 
+4

나는 이것이 10e + 9가 아니라 1e + 12라고 믿습니다! –

+7

이것은 꽤 늦은 답변이지만 예제의 숫자는 초 단위의 숫자가 아니며 변환 할 숫자입니다. 전체 아이디어는 그 가치를 알 필요가 없다는 것입니다. –

+2

나는 이것이 받아 들여진 대답이어야한다고 생각한다. convert()를 사용하면 toXxx()를 사용하는 것이 바람직합니다. 왜냐하면 convert()를 사용하면 toXxx()와 달리 변환이 어느 방향으로 발생하는지 명확하지 않기 때문입니다. –

314

TimeUnit는 열거는

다음 식을 초 나노초에서 변환 할 TimeUnit 열거 (나중에 자바 5)를 사용

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

- 이후는

NANOSECONDS.toSeconds(elapsedTime); 
+77

+1로 프록시를 변경하여 휠을 재발 명하지 않습니다. – Brett

+9

이 방법에는 1 초도 포함되지 않습니다. 따라서 4.9999999는 단순히 4 초가됩니다. – Richard

+1

이것은 오류가 발생하기 쉽기 때문에 1을 쓰지 말고 0을 완전히 쓰지 않아야하므로 바람직합니다. – demongolem

18

가 상세를 줄이기 위해 정적 가져 오기를 사용할 수 있습니다 :

+1

+1에 대한 언급 –

4

당신이 작성해야 :

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

몇 나노초가 발생할 수 있습니다 변수에 endTime- 사용자 지정. 이 방법을 사용하면 정확한 경과 시간을 알 수 있습니다.

: 그리고 이것은 정수 값보다 더 정확하다, 이중 형식으로 초 시간을 변환합니다

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

는 :

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)/1000.0; 
관련 문제