Получить DateTime из интернет-службы и сравнить с LocalTime за доли секунды - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь получить 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);
            }

1 Ответ

1 голос
/ 05 июля 2019

Вы понимаете, что в запросе от удаленного сервера есть задержка (даже если он такой же маленький, как, скажем, 5 мс), и что иногда, из-за этой задержки, в момент, когда вы фиксируете текущее время компьютера, секунда может бытьотличается от серверного.

Из-за этого прямое сравнение часов, минут и т. д. иногда может дать сбой, независимо от того, что вы делаете.Дело не в том, что код работает недостаточно быстро.

Вместо этого попробуйте сравнить временную метку, полученную с удаленного сервера, с временем локального компьютера, +/- 30 мс или с любым другим допустимым временем ожидания.be.

Возможно, вам будет интересно узнать, как это рассматривается в протоколе сетевого времени: протокол сетевого времени

...