Как я могу сравнить системное время пользователя с фактическим временем и условно обновить его?
Как я могу сравнить системное время пользователя (просто) с "реальным" временем (его время может быть установлено неправильно), а затем сообщить ему и предложить обновить его системное время до фактического времени, а затем сделать это?
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);
}
}
Может быть, время Нода в моем будущем. Я ничего не могу поделать, но каждый раз, когда я вижу это имя, я вспоминаю песню Дона Уильямса / Эрика Клэптона.
2 ответа
Процесс должен иметь SE_SYSTEMTIME_NAME
привилегия для установки системного времени. Приложение Магазина Windows никогда не будет иметь этой привилегии. Приложения Магазина Windows работают в изолированной программной среде, называемой контейнером приложений, и ограничены в том, как они могут взаимодействовать с остальной частью системы.
Из обычного настольного приложения, которое имеет достаточные привилегии, SetSystemTime
может использоваться для установки системного времени.
В дополнение к ответу Джеймса МакНеллиса...DateTime.Now использует местное системное время. Вам нужно подключиться к сетевому серверу времени (NTS), чтобы получить "реальное" время. Затем вы можете проанализировать ответ от NTS как структуру DateTime и сравнить с DateTime.Now.
Если они не совпадают, вы можете использовать SetSystemTime (при условии, что у вас есть привилегии), чтобы установить время, предоставляемое NTS.
Имейте в виду, что, скажем, например, вы получаете ответ NTS, анализируете его и затем устанавливаете системное время, новое локальное системное время все равно будет неправильным из-за истекшего времени, которое прошло между получением ответа NTS и установкой системного времени.
Возможно, вы захотите использовать что-то вроде Timespan или секундомер, чтобы отслеживать прошедшее время между получением ответа 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