c# - 从互联网服务获取 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);
}
解决方案
您了解来自远程服务器的请求存在延迟(即使它很小,例如 5 毫秒),并且有时,由于该延迟,您捕获计算机当前时间的那一刻,第二个可能与服务器的。
因此,无论您做什么,直接比较小时、分钟等有时都会失败。这不是代码运行速度不够快的问题。
相反,请尝试将您从远程服务器获得的时间戳与本地计算机时间(+/- 30 毫秒)或您认为可接受的延迟时间进行比较。
您可能有兴趣阅读网络时间协议中如何解决此问题: 网络时间协议
推荐阅读
- python - 如何使标签在 python 中的 seaborn 中看起来正常?
- angular - Chrome 是否有类似 Postman 的 SSL 证书验证设置?
- python - 如何检查 Python dict 是否有特定的键
- javascript - 按下回车键时如何使函数执行某些操作
- javascript - 将占位符文本添加到 plotly 小部件中的 selectize.js 下拉菜单
- python-3.x - ini键上的python插值
- selenium - Selenium Grid Session 无法自动关闭并在多次运行后变得无响应
- c# - 属性“名称”上的“[必需]”导致 ModelState 每次都返回无效。为什么?
- react-native - 如何修复平面列表未显示反应原生
- c - 如何使用方法和函数在语言 c 上插入和删除?