드리프트에 대해 걱정하지 않고 기계가 무작위로 시간을 변경하는 것이 아니라고 가정하면 NTP 서버를 핑 (ping)하여 IT가 생각하는 시간을 얻고 그 시간과 비교할 수 있습니다. 로컬 시스템은 그것이 있다고 생각하고 차이를 계산 한 다음 현지 시간에 작업을 예약합니다.
예를 들어, NTP 서버가 12시 30 분이라고 말하면 로컬 컴퓨터는 12시 25 분이라고 말합니다. 그리고 당신은 13:00 NTP 시간에 당신의 업무가 끝나길 원합니다.
12:25 - 12:30 = -0 : 05. 13:00 + (-0 : 05) = 12:55이므로 12:55에 작업을 예약하십시오.
부칙은 -
내가 구현의 순진함으로 말할 수 없다, 나는 프로토콜에 충분히 익숙하지 않다.
결국 실용적인 정확도의 수준이 받아 들여질 수 있습니다. NTP는 시스템 간의 시간을 동기화하는 데 사용됩니다. 문제의 해결 방법 중 하나는 지속적으로 호출하는 것입니다. "NTP Ping, offset with schedule"기법을 사용하고 미래의 시간이 미래의 8 시간이라면 클럭 크립이 발생할 가능성이 매우 높습니다. 즉, 작업이 " 12시 55 분 ", 12시 55 분 롤 때, 그것은 시계가 전혀 동기화되지 않았기 때문에 원래 NTP 서버에서 벗어날 수 있으며, 작업은 거의 재 동기화로 다시 스케줄되지 않았습니다.
원래 일정과 실제 실행 사이의 기간이 길어질수록 분명히 표류 할 가능성이 커집니다. 이것은 원본 NTP 핑이 얼마나 좋은지 상관없이 아티팩트입니다. 드리프트를 보상하기 위해 실행 시간에 가까워 질 때 이러한 작업을 다시 스케줄 할 계획이 없다면 NTP의 "합리적인"구현이 적합 할 것입니다.
NTP 클라이언트가있는 Apache Commons NET 라이브러리가 있습니다. 어떤 사람들은 Windows에서 해상도 문제 (10-15ms)가있는 System.currentTimeMillis()를 사용한다고 불평합니다. System.nanoTime은이 문제를 해결하고이를 사용하기 위해 라이브러리를 쉽게 변경하고 다시 작성할 수 있습니다.
구현의 "순진함"을 어떻게 반영하는지는 말할 수 없습니다. 그러나 결국에는 두 시스템과 작업 (가상)을 동기화 상태로 유지하는 데 얼마나 긴밀한 관계가 필요합니다.
그래,하지만 인기 히트 2004 년 이후 업데이 트되지 않았습니다. 여기에 관련된 StackOverflow 질문 : [Java NTP 클라이언트] (http://stackoverflow.com/questions/925191/java-ntp-client) –