2014-10-01 35 views
4

我有一個NTP服務器和我收到的日期如下圖所示:如何使DateTime.Now與NTP服務器同步?

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

但我的問題是,我只能從NTP服務器的當前時間,但沒有重新連接到NTP-後不能更新服務器。

我試圖做一個線程像(1000毫秒間隔)

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

它總是顯示相同的日期時間預期。喜歡(01.10.2014 - 15:31:25)

但是,如何更新日期時間,以便它總是給我當前日期時間?

例如,如果我使用下面的代碼,它給了我當前的本地時間

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

但我需要服務器的時間,而不是本地時間。而我的問題是,我無法每隔一秒就得到它。

有沒有辦法做到這一點,沒有每隔一秒到ntp服務器的新連接?我有500多個需要服務器時間的客戶端應用程序。

+2

您應該配置您的服務器與NTP服務器同步。 – vcsjones 2014-10-01 13:47:10

+0

你想設置*本地系統的*時間,還是隻顯示服務器的時間?如果您需要服務器時間,則需要繼續調用它。 – crashmstr 2014-10-01 13:47:52

+0

你的意思是像操作系統日期時間與NTP服務器同步? – 2014-10-01 13:48:36

回答

4

你不能不保持輪詢它。服務器上的時間可能比本地PC時間更改或更少,因此您必須在每次刷新時進行同步。

另一種方法是將PC配置爲與NTP服務器進行常規同步,並使用本地時間作爲「服務器時間」。

您無法將DateTime.Now設置爲服務器時間,因爲您可能需要。

我能想到的最後一個選項是每分鐘左右執行一次同步,並將本地和服務器之間的差異保存在內存中,並將其添加到顯示的時間。

TimeSpan serverTimeDifference = GetServerTimeDifference(); 

DateTime actualTime = DateTime.Now + serverTimeDifference; 

其中GetServerTimeDifference是:

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

那麼這是更好的然後同步。每一秒。你知道「Windows時間服務工具和設置」嗎? http://msdn.microsoft.com/de-de/library/cc773263(v=ws.10).aspx我剛剛發現它 – 2014-10-01 13:57:28

+0

不知道這一點。如果你有足夠的權限可以幫助。 – 2014-10-01 13:58:24

+0

我想upvote,但我不能。我將從這個想法開始,每隔一分鐘從NTC-Server進行輪詢 – 2014-10-01 14:30:22