나는 곧 사용하려고했다.System.currentTimeMillis()
Eclipse에서 Javadoc에 다음 단락이 있음을 알았을 때 :
Returns the current system time in milliseconds since January 1, 1970
00:00:00 UTC. This method shouldn't be used for measuring timeouts or
other elapsed time measurements, as changing the system time can affect
the results.
그래서 내가 의지 할 수 없다는 뜻입니다.System.currentTimeMillis()
이 현재 시점에 대한 참조를 구체적으로 유지하고 싶다면 그렇다면 가장 정확한 방법은 무엇입니까? 세 가지 방법으로 현재 시간을 다르게 표시합니까?
최신 정보: 내가하려고하는 것은 두 개의 개별 프로그램 실행에서 두 시점의 차이를 측정하는 것입니다. 내 두려움은 만약 내가 사용하면System.currentTimeMillis()
사용자가 처음 실행 한 후 시스템 시간으로 재생하면 초당 기이 한 값을 얻을 수 있습니다.
특정 시점을 참조하고 싶다면 확실히 의지 할 수 있습니다.System.currentTimeInMillis()
. 설명하는 세 가지 방법은 시간을 같은 방법으로 표시합니다. 차이점은 어떤 종류의 객체가 래핑되었는지입니다. 프로그램에서 필요한 변형을 사용하십시오.
프로그램 실행 중에 두 지점의 차이를 측정하려면 다음을 사용하십시오.System.nanoTime()
대신.
두 개의 개별 프로그램 실행에서 두 지점 사이의 시간차를 얻으려면 사용자가 시스템 시계로 놀 수도 있다는 두려움이있는 경우 외부 시간 소스에 의존해야합니다. 예를 들어, 다음을 볼 수 있습니다.Java SNTP Client
.
System.currentTimeInMillis()
, 내 사용자가 어떻게 든 주위에 시스템 시간과 놀 수 있고 두 번째 실행에서 예기치 않은 가치를 얻을 수 있습니다. - Matt Quiros
너는 다음을 사용해야한다.System.nanoTime()
, API docs :
가장 정확한 사용 가능한 시스템 타이머의 현재 값을 반환하고, 나노초 단위.
이 방법경과 시간을 측정하는 데만 사용할 수 있습니다.~하지 않습니다. 시스템 또는 벽시계의 다른 개념과 관련됩니다. 가치 일부 고정 된 시간이지만 임의의 시간 이후로 반환되는 나노초를 나타냅니다. (아마도 미래에는 가치가 부정적 일 수 있습니다). 이 방법 나노초 정밀도를 제공하지만 반드시 나노초는 아닙니다. 정확성. 값 변경 빈도에 대한 보장은 없습니다. 대략적인 것보다 큰 연속적인 호출의 차이 292 년 (2 년63나노초)는 경과 시간을 정확히 계산하지 않습니다 수치 오버플로 때문입니다.
currentTimeInMillis()
, 나노초 수준까지만 정확하지만 장치 또는 컴퓨터의 시스템 시간이 변경되면 오작동 할 수 있습니다. - Matt Quiros
System.currentTimeInMillis ()보다 System.nanoTime ()을 사용하십시오.
의 특징System.currentTimeMillis()
장기적으로 정확성을주기 위해 주기적으로 수정된다는 것입니다. 이것은 시간이 거꾸로 간다는 것을 의미 할 수도 있고, 교정 될 때 앞으로 점프 할 수도 있습니다.
의 특징System.nanoTime()
그것은 단조롭게 증가한다는 것입니다. JVM 간에는 관련성이있는 것은 아니지만 많은 시스템에서 마지막 프로세서 재설정 이후 대략적으로 발생합니다. 다시 부팅 할 때 재설정됩니다.
System.nanotime()
. - assylias