从互联网服务获取DateTime并在瞬间与本地时间进行比较

时间:2019-07-05 16:05:12

标签: c# datetime asynchronous compare

我正在尝试从Internet服务获取DateTime,然后将其与Computer的我的localTimeDate进行比较。我的问题有时是有一秒钟的差异,这很合逻辑,因为获取一个变量和另一个变量需要花费几毫秒的时间。 有没有办法获取这两个变量并在几毫秒内进行比较? 我以为是异步加载之类的东西,但是我不知道该怎么做或是否行得通。

这是我的代码



     private string GetTime()
            {
                try
                {
                   MessageServiceType.Test : MessageServiceType.Production);
                    ITimeServiceContract timeServiceContract = new TimeServiceTestClient();
                    DateTime icisTime = timeServiceContract.GetTimeStamp();
                    DateTime icisDateTime = icisTime.ToLocalTime();
                    return icisDateTime.ToString();


                }
                catch (Exception ex)
                {
                    NLogger.NLogger.SilentLog(ex.ToString());
                }

                return DateTime.Now.ToString();
    }

     private void OnLoad(object sender, EventArgs e)
            {
                DateTime icisDateTime = DateTime.Parse(GetTime());
                lblIcisNetTime.Text = GetTime();
                lblLocalTime.Text = DateTime.Now.ToString();
                CompareDateTimes(icisDateTime, DateTime.Now);
            }

     private void CompareDateTimes(DateTime icisNetTime, DateTime pcTime)
            {
                if (icisNetTime.Hour  > pcTime.Hour ||
                    icisNetTime.Hour  < pcTime.Hour ||
                    icisNetTime.Minute > pcTime.Minute + 1 ||
                    icisNetTime.Minute + 1 < pcTime.Minute ||
                    icisNetTime.Day > pcTime.Day + 1 ||
                    icisNetTime.Day < pcTime.Day ||
                    icisNetTime.Month > pcTime.Month + 1 ||
                    icisNetTime.Month < pcTime.Month ||
                    icisNetTime.Year > pcTime.Year + 1 ||
                    icisNetTime.Year < pcTime.Year)

                    XtraMessageBox.Show(this,
                                        "Your PC clock is wrong!",
                                        "Wrong Time and Date", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }

1 个答案:

答案 0 :(得分:1)

您了解到远程服务器的请求中存在延迟(即使该延迟小至5毫秒),有时由于该延迟,您捕获计算机当前时间的那一刻可能是与服务器的不同。

因此,有时无论您做什么,直接比较小时,分钟等都会失败。这不是代码运行速度不够快的问题。

相反,请尝试比较从远程服务器获得的时间戳与本地计算机的时间+/- 30ms或您认为可接受的延迟时间。

您可能也有兴趣阅读有关如何在网络时间协议中解决此问题的信息: Network Time Protocol