【问题标题】:How to synchronize DateTime.Now with a NTP server?如何将 DateTime.Now 与 NTP 服务器同步?
【发布时间】:2014-10-01 13:44:51
【问题描述】:

我有一个 NTP 服务器,我得到如下日期:

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

但我的问题是,我只能从 ntp-server 获取当前时间,但如果不重新连接到 NTP-Server,则无法更新它。

我曾尝试在类似(1000 毫秒间隔)的线程中执行此操作

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

它总是显示与预期相同的 DateTime。喜欢 (01.10.2014 - 15:31:25)

但是如何更新 DateTime 以便它始终为我提供当前的 DateTime?

例如,如果我使用下面的代码,它会给我当前的当地时间

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

但我需要服务器时间而不是本地时间。而我的问题是我不能每秒钟都得到它。

有没有办法做到这一点,而无需每秒与 ntp 服务器建立新连接?我有超过 500 个需要服务器时间的客户端应用程序。

【问题讨论】:

  • 您应该将您的服务器配置为与 NTP 服务器同步。
  • 您是要设置本地系统的时间,还是只显示服务器的时间?如果您需要服务器时间,则需要继续调用它。
  • 你的意思是想让 OS DateTime 和 NTP 服务器同步吗?
  • @crashmstr 我需要几秒钟的服务器时间。如果可能的话,我想在不连接到 NTP 服务器的情况下做到这一点
  • GetServerTime 是什么?

标签: c# datetime ntp


【解决方案1】:

你不能不继续投票。服务器上的时间可以多于或少于本地 PC 时间,因此您必须在每次刷新时进行同步。

另一种选择是将 PC 配置为与 NTP 服务器进行定期同步,并使用本地时间作为“服务器时间”。

您不能随意将DateTime.Now 设置为服务器时间。

我能想到的最后一个选项是每分钟左右进行一次同步,并将本地和服务器之间的差异保存在内存中,并将其添加到显示的时间中。

TimeSpan serverTimeDifference = GetServerTimeDifference();

DateTime actualTime = DateTime.Now + serverTimeDifference;

GetServerTimeDifference 在哪里:

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

【讨论】:

  • 这比同步好。每一秒。你知道“Windows 时间服务工具和设置”吗? msdn.microsoft.com/de-de/library/cc773263(v=ws.10).aspx我现在才发现
  • 不知道这一点。如果您有足够的权限,可以提供帮助。
  • 我想投票,但我不能。我将从这个想法开始,每分钟从 NTC-Server 轮询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多