首页 > 解决方案 > 从互联网服务获取 DateTime 并在瞬间与 LocalTime 进行比较

问题描述

我正在尝试从 Internet 服务获取 DateTime,然后将其与计算机中的 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);
            }

标签: c#datetimeasynchronouscompare

解决方案


您了解来自远程服务器的请求存在延迟(即使它很小,例如 5 毫秒),并且有时,由于该延迟,您捕获计算机当前时间的那一刻,第二个可能与服务器的。

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

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

您可能有兴趣阅读网络时间协议中如何解决此问题: 网络时间协议


推荐阅读