2016-06-30 12 views
0

私のコードには非常に正確なタイムスタンプが必要です。私は、この記事の最初のソリューションを使用します。ミリ秒を表示する方法

How to get timestamp of tick precision in .NET/C#?

DateTime _starttime = DateTime.UtcNow; 
    Stopwatch _stopwatch = Stopwatch.StartNew(); 

そして

DateTime highresDT = _starttime.AddTicks(_stopwatch.Elapsed.Ticks); 

と、後でそれを呼び出すをしかし、私は私が持っているMessageBox.Show(highresDT.ToString());

でそれを表示したいときのみ:

30/06/2016 14:59:06 

表示するミリ秒を希望します。出来ますか?!ありがとうございました。

私はC#で新しいです。私はそこで私の問題を完全に誤解している可能性があります。

+1

これはすごい "go google it"というコメントではありませんが、情報量が膨大で膨大なので、しばしばそのように速く答えを得ることができます。たとえば、「.net show milliseconds」を検索すると、最初の結果は、「How to:MillisecondsをDate and Time Valuesに表示する」というページで、回答と同じことが示されます。ドキュメンテーションに進む利点の1つは、あなたが探している答えを得ることですが、使用できる他のものも見つけ出し、必要なときに後でそのことを思い出すことです。 –

+0

はい、私は愚かな気分です。私は解決策がストップウォッチ "_stopwatch.Elapsed.TotalMilliseconds.ToString()"(私はしようとしたが動作しませんでした..)のようなものだと思ったし、Googleにあなたのコードを適応させる方法を見つけるのは難しいです。とにかくありがとうございました !! – jsls

答えて

4

はMicrosoftからこの例を参照してくださいMessageBox.Show(highresDT.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));

1

この文書 - Custom Date and Time Format Strings - は参考になります。必要な要素を正確に示す書式文字列を作成できます。たとえば、

MessageBox.Show(highresDT.ToString( "dd/MM/yyyy HH:mm:ss fff"));

fffは、フォーマットされた文字列にミリ秒が含まれることを示します。 (。値がゼロの場合は、 'FFF`はミリ秒を省略)このコードは、あなたはそれがないと思う方法では動作しません

2

せいぜい
DateTime _starttime = DateTime.UtcNow; 
Stopwatch _stopwatch = Stopwatch.StartNew(); 

を、あなたの精度は10〜15ミリ秒になります。

なぜなら、UtcNowはスレッド量子に対して1回だけ更新されるからです。マルチコアマシン上のWindowsでは、スレッドクォンタムは15ミリ秒です。 10ミリ秒ごとにシングルコアマシン。

ストップウォッチは非常に高精度で非常に高精度なので、より良い操作が可能です。私は例として説明します。

何とか使って正確に1ms精度と正確なストップウォッチをお持ちでしたら、時間と分のみを表示する目覚まし時計をご利用いただけますか?

できます。ストップウオッチを使って非常に正確に時間の経過を測定することができます。午前11時14分から午前11時15分までは目覚め時計を見ることができます。例えば

、あなたは以下のイベントのセット守っ場合:

  • 読むのストップウォッチ:12000ミリ秒
  • 読むクロック:11:14
  • 読むクロック:午前11:15
  • ストップウォッチを読む:15:12002ミリ秒

を次にあなたがどこかで途中で知って、時間は正確に11だった00.0000 ...そして、あなたはそれが発生したことを知っていますあなたのストップウォッチがあなたにそう言ったので、わずか2ミリ秒であった。

は、だから今、あなたは知っているストップウォッチ値12001 +/- 1ミリ秒== 11:15:00.000000

あなたはDateTime.UtcNow()、ストップウォッチに、この同じ概念を適用することができます。

ストップウォッチとutcnowをループで読んで、11:14:31.030から11:14:31.045までのUtcNowティックが表示されている場合は、そこのどこかに正確に31.04500000ストップウォッチは実際にどのくらいの物理的な時間が経過したかを教えてくれるので、どれくらいの間違いがあるか知ることができます。

+0

私はリンク先の記事を読んだことがありますか? (本当に疑問なことはありません!!!)答えた人は、この「テクニック」はUtcNowのスレッドクォンタムの不正確さを避ける方法だと言っているからです。 Personnaly私はあなたのどちらが正しいと言うことができません。(コンピュータワールドでは新しいので) しかし、私はあなたが言うことを得るが、それは私のコードに実装するのはかなり複雑です(それは既にループであり、非常に迅速かつ正確かつ正確な両方)。私はそれを試してみます:) – jsls

+0

@jsls - その男は間違っています。まず、UtcNowは15ミリ秒間同じ値を返しますが、Stopwatch(HighPerformanceCounter API経由)は最新の値を返します。それは間違いです。なぜなら、より正確にするためには、私が何を記述する必要があるのでしょうか。第2に、スレッドのタイミング:OSは、要求とスケジューリングに応じて、CPUを常にスレッドのスワッピングを行います。 'DateTime.UtcNow'を呼び出した後で、' Stopwatch.StartNew() 'を呼び出す前にスレッドをCPUから削除することが可能です。あなたはあなたのエラーを測定していません。 – antiduh

関連する問題