0

我如何检查用户的系统时间(简单)与“实时”时间(他们的时间可能设置错误),然后通知他们并提议将他们的系统时间更新为实际时间,然后这样做?

IOW,伪代码:

DateTime dtSet = DateTime.Now;
DateTime dtActual = GetActualTime();
if (dtSet != dtActual) // allow some delta, such as anything under a 1 minute variance)
{
  if (UserAllowsChange())
  {
    ChangeTheTimeTo(dtActual);
  }
}

也许野田时间在我的未来。我情不自禁,但每次看到这个名字,我都会想起 Don Williams/Eric Clapton 的歌曲。

4

2 回答 2

3

进程必须有权SE_SYSTEMTIME_NAME设置系统时间。Windows 应用商店应用永远不会拥有此权限。Windows 应用商店应用在称为应用容器的沙盒中运行,并且在与系统其余部分交互的方式上受到限制。

来自具有足够权限的普通桌面应用程序,SetSystemTime可用于设置系统时间。

于 2012-11-09T15:34:21.353 回答
1

除了 James McNellis 的回答...DateTime.Now 使用本地系统时间。您需要连接到网络时间服务器 (NTS) 以获得“实时”时间。然后,您可以将来自 NTS 的响应解析为 DateTime 结构,并与 DateTime.Now 进行比较。

如果它们不匹配,那么您可以使用SetSystemTime(如果您有权限)来设置 NTS 给出的时间。

请记住,例如您获得 NTS 响应,解析它,然后设置系统时间,新的本地系统时间仍然是错误的,因为在获得 NTS 响应和设置系统时间之间经过了一段时间。

您可能需要考虑使用 Timespan 或 Stopwatch 之类的东西来监控在获取 NTS 响应和设置系统时间之间经过的时间。将此添加到 NTS 响应中应该会给出更准确的结果。

检查一下(连接到 NTS)

http://www.codeproject.com/Articles/17851/Connecting-To-A-Network-Time-Server

http://www.dotnet-snippets.com/dns/c-simple-network-time-ntp-protocol-client-SID571.aspx

于 2012-11-09T15:43:11.393 回答