0

一部のマシンが同期されているかどうかを確認しようとしています。そのために、リモート マシンの hrSystemTime OID を文字列で読み取り、それを DateTime に変換して、ローカル マシンの時刻と比較します。これを 1 日 1 回、午前 1 時 50 分に行います。11 月 3 日の午前 1 時 50 分に、diff は 1 時間の違いを示しましたが、diff2 は違いを示しませんでした。この 1 時間の差分は、この日の午前 1:00 から午前 2:00 の間にのみ確認すると表示されます。(午前 2:00 は、DST が時間を冬の午前 1:00 に変更する時刻です)。

DateTime localTime;
DateTime remoteTime;
TimeSpan diff, diff2;
localTime = DateTime.Now;
remoteTime = Convert.ToDateTime("11/03/2013 1:50:00 AM");
diff = localTime.ToUniversalTime() - remoteTime.ToUniversalTime();
diff2 = localTime.ToLongTimeString() - remoteTime.ToLongTimeString();

これらは印刷された値です:

localTime.ToUniversalTime() = 11/03/2013 1:50:00 AM
remoteTime.ToUniversalTime() = 11/03/2013 1:50:00 AM
localTime.ToLongTimeString() = 11/02/2013 8:50:00 PM
remoteTime.ToLongTimeString() = 11/02/2013 9:50:00 PM
4

2 に答える 2

2

おそらくDateTime.UtcNow、両方のシステムで使用して、それらを比較する必要があります。これにより、比較に影響を与えるローカル タイム ゾーンと DST の問題が解消されます。

2 つのシステムを比較するときは、おそらく ISO8601 形式の文字列も使用する必要があります。これは、地域設定のためにこれらのシステムの日付形式が異なる場合に備えてです。で取得できますyourDateTime.ToString("o")

ただし、比較の際にネットワーク伝送遅延時間を考慮していない可能性があることも考慮してください。そのためには、C# で独自のコードを記述するのではなく、NTP を使用する必要があります。

于 2013-11-06T15:40:37.197 に答える