2014-10-01 120 views
4

나는 NTP-서버를 가지고 있고 날짜 아래와 같이 점점 오전 :DateTime.Now를 NTP 서버와 동기화하는 방법은 무엇입니까?

DateTime NTPDateTime = GetServerTime(); //GetServerTime returns a new DateTime 

하지만 내 문제는, 난 단지 NTP 서버에서 현재 시간을 얻을 수 있지만, 후 NTP-에 다시 연결없이 업데이트 할 수있다 섬기는 사람.

나는 (1000MS 간격) 예상대로

string displayTime() { 
    this.lblServerTime.Text = NTPDateTime.ToLongTimeString(); 
} 

그것은 항상 같은 날짜 시간을 보여줍니다 같은 스레드에서 그것을 할 노력했다. Like (01.10.2014 - 15:31:25)

하지만 DateTime을 업데이트하면 현재 날짜 시간이 항상 표시됩니다. 나는 다음과 같은 코드를 사용하는 경우

예, 그것은 나에게 현재 현지 시간

//in a thread 
string displayTime() { 
    this.lblServerTime.Text = DateTime.Now.ToLongTimeString(); 
} 

을 제공하지만하지의 현지 서버 시간이 필요합니다. 내 문제는 내가 영원히 갈 수 없다는 것이다.

거기에 새로운 연결없이 ntp - 서버에 그것을 할 방법이 무엇입니까? 나는 서버 시간을 필요로하는 클라이언트 애플리케이션이 500 개 이상있다.

+2

: GetServerTimeDifference

TimeSpan serverTimeDifference = GetServerTimeDifference(); DateTime actualTime = DateTime.Now + serverTimeDifference; 

. – vcsjones

+0

* 로컬 시스템의 시간을 설정 하시겠습니까, 아니면 서버 시간 만 표시 하시겠습니까? 서버 시간이 필요하면 계속 호출해야합니다. – crashmstr

+0

OS DateTime을 NTP 서버와 동기화하는 것을 의미합니까? –

답변

4

폴링 상태를 유지할 수 없습니다. 서버의 시간은 로컬 PC 시간보다 많거나 적게 변경 될 수 있으므로 새로 고칠 때마다 동기화를 수행해야합니다.

또 다른 옵션은 NTP 서버와 정기적 인 동기화를 수행하고 로컬 시간을 '서버 시간'으로 사용하도록 PC를 구성하는 것입니다.

DateTime.Now은 서버 시간으로 설정할 수 없습니다.

내가 생각할 수있는 마지막 옵션은 매분마다 동기화를 수행하고 메모리에있는 로컬과 서버의 차이를 유지하고 표시된 시간에 추가하는 것입니다. 당신은 NTP 서버와 동기화하도록 서버를 구성해야합니다

private static TimeSpan GetServerTimeDifference() 
{ 
    return GetServerTime() - DateTime.Now; 
} 
+0

음 이것이 더 좋고 동기가 좋습니다. 매 초. "Windows 시간 서비스 도구 및 설정"에 대해 알고 있습니까? http://msdn.microsoft.com/de-de/library/cc773263(v=ws.10).aspx 방금 발견했습니다 –

+0

알지 못합니다. 충분한 권한이있는 경우 도움이 될 수 있습니다. –

+0

나는 upvote하고 싶지만, 할 수 없다. NTC 서버에서 매분마다 폴링하는 아이디어로 시작하겠습니다. –