使用NTPClient与时间服务器同步/更新计算机时钟

时间:2019-03-08 00:16:58

标签: c# ntp

我正在尝试使用服务器同步计算机时钟。我四处搜寻,发现“ NTPClient”可用于此目的。

我的目标是将计算机时间与以下时间服务器同步:
time.nist.gov

下面是我可以使用的库和代码的链接:

获取NTPClient.cs文件的来源
https://www.codeproject.com/Articles/1005/SNTP-Client-in-C

以下代码的来源
https://www.codeguru.com/csharp/csharp/cs_date_time/timeroutines/article.php/c4207/C-SNTP-Client.htm

运行代码时,我得到如下图所示的图像,它在正确的时间返回: enter image description here

我认为但不确定重要的内容是:
client.Connect(true);

像智商所说的,“ true”对“ UpdateSystemTime”意味着,但是那没有发生,所以我相信我不确定如何做到这一点?

void synccomputerTime()
{
    //https://www.codeproject.com/Articles/1005/SNTP-Client-in-C (Source to get NTPClient.cs file)
    //https://www.codeguru.com/csharp/csharp/cs_date_time/timeroutines/article.php/c4207/C-SNTP-Client.htm (Source of below code)
    NTPClient client;
    try
    {
        client = new NTPClient("time.nist.gov");
        client.Connect(true); //true should UpdateSystemTime but doesn't do that?
    }
    catch (Exception e)
    {
        MessageBox.Show("ERROR: {0}", e.Message);
        return;
    }
    MessageBox.Show(client.ToString());
}

............................................... .......

我也曾尝试过没有运气的此类:
SNTPClient.cs https://github.com/ramonsmits/InternetTime/blob/master/SNTPClient.cs

在这里,我还将这一行设置为true,因为它应该更新计算机时钟,但不会这样做:
sntp.Connect(true); //更新本地客户端时钟为true

void synccomputerTime2()
{
    //https://github.com/ramonsmits/InternetTime/blob/master/SNTPClient.cs
    InternetTime.SNTPClient sntp = new InternetTime.SNTPClient("ntp1.ja.net");
    sntp.Connect(true); // true to update local client clock
    DateTime dt = sntp.DestinationTimestamp.AddMilliseconds(sntp.LocalClockOffset);
    string timeStampNow = dt.ToString("dd/MM/yyyy HH:mm:ss.fff");
    MessageBox.Show(timeStampNow);
}

1 个答案:

答案 0 :(得分:0)

Windows已经内置了一个NTP客户端(W32Time)。只需从管理员命令提示符处执行此操作:

net time /setsntp:time.nist.gov

如果您在加入Active Directory域的企业网络中,则默认情况下,您的计算机已经与域控制器同步了时间,并且您不想更改此时间。