1

나는 곧 사용하려고했다.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()사용자가 처음 실행 한 후 시스템 시간으로 재생하면 초당 기이 한 값을 얻을 수 있습니다.


  • 시스템 시간을 변경하지 않는 한 사용할 수 있습니다. :) 어쨌든, Windows에서는 매우 정확하지 않습니다. - Tudor
  • 관련 항목 :stackoverflow.com/questions/11591000/…시간이 변경 되어도 측정에 영향을 미치지 않도록해야하는 경우 :System.nanotime(). - assylias
  • 시차를 측정하고 싶습니까? 아니면 현재 시간에 대한 참조를 원하십니까? - João Silva
  • 1 일 이내에 오랜 기간 동안 시간 차이를 측정하려고합니다. 그것은 현재 시간을 참조 할 필요가있는 것과는 다른 것입니까? - Matt Quiros

4 답변


4

특정 시점을 참조하고 싶다면 확실히 의지 할 수 있습니다.System.currentTimeInMillis(). 설명하는 세 가지 방법은 시간을 같은 방법으로 표시합니다. 차이점은 어떤 종류의 객체가 래핑되었는지입니다. 프로그램에서 필요한 변형을 사용하십시오.

프로그램 실행 중에 두 지점의 차이를 측정하려면 다음을 사용하십시오.System.nanoTime()대신.

두 개의 개별 프로그램 실행에서 두 지점 사이의 시간차를 얻으려면 사용자가 시스템 시계로 놀 수도 있다는 두려움이있는 경우 외부 시간 소스에 의존해야합니다. 예를 들어, 다음을 볼 수 있습니다.Java SNTP Client.


  • 두 번의 개별 프로그램 실행에서 두 시점의 차이를 측정하려면 어떻게해야합니까? 내 이해에서, 만약 내가 사용하면System.currentTimeInMillis(), 내 사용자가 어떻게 든 주위에 시스템 시간과 놀 수 있고 두 번째 실행에서 예기치 않은 가치를 얻을 수 있습니다. - Matt Quiros
  • @mattquiros : 편집을 참조하십시오. - Keppil

6

너는 다음을 사용해야한다.System.nanoTime(), API docs :

가장 정확한 사용 가능한 시스템 타이머의 현재 값을 반환하고,   나노초 단위.

이 방법경과 시간을 측정하는 데만 사용할 수 있습니다.~하지 않습니다.   시스템 또는 벽시계의 다른 개념과 관련됩니다. 가치   일부 고정 된 시간이지만 임의의 시간 이후로 반환되는 나노초를 나타냅니다.   (아마도 미래에는 가치가 부정적 일 수 있습니다). 이 방법   나노초 정밀도를 제공하지만 반드시 나노초는 아닙니다.   정확성. 값 변경 빈도에 대한 보장은 없습니다.   대략적인 것보다 큰 연속적인 호출의 차이   292 년 (2 년63나노초)는 경과 시간을 정확히 계산하지 않습니다   수치 오버플로 때문입니다.


  • 저는 권력을 위 첨자로 편집했습니다. 그렇지 않으면 당신은 263 나노초를 얻습니다. 이것은 292 년보다 약간 짧습니다 ... - Rich
  • 그러나 이것은 단순히 다음과 동일하지 않습니다.currentTimeInMillis(), 나노초 수준까지만 정확하지만 장치 또는 컴퓨터의 시스템 시간이 변경되면 오작동 할 수 있습니다. - Matt Quiros
  • @ mattquiros 아니,"... 시스템 또는 벽시계의 다른 개념과 관련이 없다." - dacwe
  • @mattquiros 또한"나노초 레벨까지 정확하게"이름이 그것을 제안하더라도. 대답에서 지적한대로 :이 방법은 나노초 정밀도를 제공하지만, 반드시 나노초 정도의 정밀도는 아니다. 값이 변경되는 빈도에 대한 보장은 없습니다. & quot; - assylias
  • 오, 그래. 나는 "가장 정확한 사용 가능한 시스템 타이머의 현재 값"때문에 두 번 생각하고있었습니다. 부분 (첫 번째 문장). - Matt Quiros

0

System.currentTimeInMillis ()보다 System.nanoTime ()을 사용하십시오.


0

의 특징System.currentTimeMillis()장기적으로 정확성을주기 위해 주기적으로 수정된다는 것입니다. 이것은 시간이 거꾸로 간다는 것을 의미 할 수도 있고, 교정 될 때 앞으로 점프 할 수도 있습니다.

의 특징System.nanoTime()그것은 단조롭게 증가한다는 것입니다. JVM 간에는 관련성이있는 것은 아니지만 많은 시스템에서 마지막 프로세서 재설정 이후 대략적으로 발생합니다. 다시 부팅 할 때 재설정됩니다.

연결된 질문


관련된 질문

최근 질문