나는 그것을 안다.System.nanoTime()
이제 시간을 측정하는 데 선호되는 방법입니다.System.currentTimeInMillis()
. 첫 번째 분명한 이유는 nanoTime ()이 더 정확한 타이밍을 제공하고 다른 이유는 시스템의 실시간 클럭 조정에 영향을 받는다는 것입니다. "시스템 실시간 시계의 영향을받는 것"은 무엇을 의미합니까?
이 경우 나는 유용한 블로그 게시물 발췌 다음과 같은 것을 발견했다.
관심이있는 경우절대 시간 측정항상 사용하십시오.
System.currentTimeMillis()
. 그 결의안이 아주 거친 (이것은 절대 시간 동안 거의 문제가되지 않지만).관심이있는 경우경과 시간 측정 / 계산, 그 다음에 항상 사용하다
System.nanoTime()
. 대부분의 시스템에서는 마이크로 초 단위의 해상도. 그래도 알아 두십시오. 일부 플랫폼에서 실행하려면 마이크로 초가 걸릴 수도 있습니다.
클럭 및 타이머 - 일반 개요데이빗 홈즈
이후System.currentTimeMillis()
시스템에 의존하고있다.시간시간에 대한 조정은 시간을 맞추기 위해 합법적입니다.
여기서 조정은 무엇을 의미합니까? 예를 들어 설명을 봅니다.CLOCK_REALTIME
Linux에서 :
실제 (즉, 벽시계) 시간을 측정하는 시스템 전체의 시계. 이 시계를 설정하려면 적절한 권한이 필요합니다. 이 시계는시스템 시간의 불연속 점프에 영향을 받음(예 :만약 시스템 관리자가 수동으로 시계를 변경합니다.), 그리고 adjtime (3) 및 NTP에 의해 수행되는 증분 조정.
메소드의 JavaDoc을 확인하십시오.
System.nanoTime()
"...이 방법은 경과 시간을 측정하는 데만 사용할 수 있으며 시스템 또는 벽시계 시간의 다른 개념과는 관련이 없습니다 ..."
System.currentTimeMillis()
"... ... 현재 시간을 밀리 초 단위로 반환합니다 ..."
따라서 측정 중에 시스템 시간이 변경되는지System.currentTimeMillis()
측정하는 간격도 변경됩니다. 그러나 측정 간격을 측정 할 때System.nanoTime()
방법.
즉,System.currentTimeMillis()
반환은 기계의 내부 시계에서 얻습니다. sysadmin (또는 NTP)이 시간을 변경하면 (예 : 시계가 5 분 빠르게 실행되는 것으로 확인되고 sysadmin이이를 수정 한 경우)System.currentTimeMillis()
영향을받습니다. 즉, 값이 감소하는 것을 볼 수 있으며 간격을 측정하는 데 사용하면 타이밍이 꺼질 수 있습니다. 측정 할 수도 있습니다.부정타이밍.
System.nanoTime()
반면에 일부 내부 CPU 카운터 / 클럭에서 파생 된 값을 반환합니다. 이 시계로 측정 된 시간은 사용자 또는 프로그램에 의해 변경 될 수 없습니다. 이것은 타이밍에 대해 더 신뢰할 수 있음을 의미합니다. 하지만 CPU 클럭은 전원 끄기시 재설정되므로 현재 "벽시계"시간을 찾는 데 유용하지 않습니다.
currentTimeInMillis()
일광 절약 시간제 전환 중에 경과 시간을 기록 하시겠습니까? 아니면 그것이 의미하는 바가 아닙니까? - trevor-ecurrentTimeMillis
측정하려고하는 것은 물리적 현상으로서의 시간의 흐름이다. DST 변경은 여행 할 때의 시간대 변경과 유사합니다. 시간이 분과 시간으로 표시되는 방식에만 영향을줍니다. 시간 자체는 영향을받지 않습니다. - JonicurrentTimeMillis
예를 들어 영향을받지 않았습니다. DST는 영향을 받지만 예를 들어 도약과 달리,nanoTime
. - Louis WassermancurrentTimeInMillis
"오늘의 시간"을 사용한다. 또는 absolute clock은 currentTimeInMillis가 DST의 영향을 받음을 의미하지 않습니까? - Geek