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);
  }
}

多分野田時間は私の将来です。仕方がないのですが、その名前を見るたびに、ドン・ウィリアムズ/エリック・クラプトンの曲を思い浮かべます。

4

2 に答える 2

3

プロセスにはSE_SYSTEMTIME_NAME、システム時刻を設定する権限が必要です。Windows ストア アプリには、この特権はありません。Windows ストア アプリは、アプリ コンテナーと呼ばれるサンドボックスで実行され、システムの残りの部分と対話する方法が制限されています。

十分な権限を持つ通常のデスクトップ アプリからSetSystemTime、システム時刻の設定に使用できます。

于 2012-11-09T15:34:21.353 に答える
1

James McNellis の答えに加えて... DateTime.Now はローカル システム時間を使用します。「リアルタイム」時間を取得するには、Network Time Server (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 に答える