3

トリガーのあるタスクがあります:

At 0:00 every day - after triggered, repeat every 1 hours for a duration of 1 day.

そして、私のアプリケーション内で、私はこのように時間を読みました:

dateTimeUtcNow = DateTime.Now;

また、ごくまれに、dateTimeUtcNow が 1 時間前の数ミリ秒の時刻を表示することがあります。2015-11-11 14:59:59,914

サーバーは Windows Server 2012 R2 で実行されます。ホーム バージョンではこれを受け入れることができましたが、運用環境では受け入れられませんでした。

なんで?これはバグですか?どうすればこれを防ぐことができますか?

4

1 に答える 1

5

DateTime の精度、または精度の欠如に関する Eric Lippert の記事を参照してください。ここにリンクします。

記事の重要な段落:

要するに、「今何時?」という質問です。実際には、システム固有の精度レベルを反映する精度レベルに対してのみ回答する必要があります。ほとんどのコンピューターの時計は、公式時間の 1 ミリ秒以内でも正確に同期されていないため、その精度レベルを超える精度は嘘です。私の意見では、DateTime 構造がそれと同じくらいの精度で表面化するのはかなり残念です。なぜなら、その構造に対する操作もそのレベルまで正確であるべきだと思われるからです。しかし、それらはほぼ確実にそれほど正確ではありません。

真夜中前にタイマーをオフにする必要がある場合は、コメントで既に提案されているように、「わずかに」将来の日付/時刻を強制する必要があります。これ以上の制御はありません。

于 2015-11-17T22:26:51.373 に答える