我正在尝试从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);
}
答案 0 :(得分:1)
您了解到远程服务器的请求中存在延迟(即使该延迟小至5毫秒),有时由于该延迟,您捕获计算机当前时间的那一刻可能是与服务器的不同。
因此,有时无论您做什么,直接比较小时,分钟等都会失败。这不是代码运行速度不够快的问题。
相反,请尝试比较从远程服务器获得的时间戳与本地计算机的时间+/- 30ms或您认为可接受的延迟时间。
您可能也有兴趣阅读有关如何在网络时间协议中解决此问题的信息: Network Time Protocol