2014-10-01 38 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