Как я могу сравнить системное время пользователя с фактическим временем и условно обновить его?

Как я могу сравнить системное время пользователя (просто) с "реальным" временем (его время может быть установлено неправильно), а затем сообщить ему и предложить обновить его системное время до фактического времени, а затем сделать это?

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

Другие вопросы по тегам