如何根据“实际”时间检查用户的系统时间(简单)(他们的时间可能设置错误),然后通知他们并提供将系统时间更新为实际时间然后这样做?
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);
}
}
也许Noda Time在我的未来。我无法帮助它,但每当我看到这个名字时,我都会想起Don Williams / Eric Clapton的歌。
答案 0 :(得分:3)
进程必须具有SE_SYSTEMTIME_NAME
权限才能设置系统时间。 Windows应用商店应用永远不会拥有此权限。 Windows应用商店应用程序在沙盒中运行,称为应用程序容器,并且它们与系统其他部分的交互方式受到限制。
在具有足够权限的普通桌面应用中,SetSystemTime
可用于设置系统时间。
答案 1 :(得分: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