2009-07-30 90 views
33

マイクロ秒を含む時間の書式設定方法を検索しています。 私はクラスDateTimeを使用しています。プロパティを使用して、ミリ秒までデータを取得できますが、これはenougthではありません。 Ticksを試してみましたが、マイクロ秒に変換する方法がわかりませんでした。C#時間(マイクロ秒)

+4

はDateTime.Nowには注意してください、それはマイクロ秒に正確ではありません。時間をつかむためにSystem.Diagnostics.Stopwatchを試してください。また、高解像度のシステムクロックを持っていることを確認してください。 –

+0

はい、あなたは正しいです。このコメントを理解する時間がかかりました。時間はマイクロ秒単位で表されますが、時間はマイクロ秒単位ではありません。 –

答えて

71

あなたはマイクロ秒を表すためにフォーマット文字列で"ffffff"を使用することができます。

Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.ffffff")); 

はマイクロ秒にダニの数を変換するには、単に使用します。

long microseconds = ticks/(TimeSpan.TicksPerMillisecond/1000); 

これらはあなたを助けていない場合は、あなたが何をしようとしているかについて、より多くの情報を提供してください。

編集:私はもともとしかし1000によってTimeSpan.TicksPerMillisecondを分割する際の精度を失うことを避けるために、1000 ticksを掛け、それはTicksPerMillisecondが実際万の一定値であることが判明 - あなたは何の問題もなく1000で割ると、中にすることができますので、実際には次のものを使用できます:

const long TicksPerMicrosecond = 10; 

... 

long microseconds = ticks/TicksPerMicrosecond; 
+0

私は両方のopyionsを使用しましたが、問題はマイクロ秒が常にゼロになることです。それはそれの解決を得ることができないようだ。 –

+2

それはフォーマットの問題ではなく、解決の問題です。どこからデータを取得するのですか?どのくらいの時間がかかるかを試すには、 'Stopwatch'クラスを使うべきです。 –

+0

いいえ、私はロガーに必要です。システムのすべてのイベントについて、私は起きたときに最初に入力します。 どんなsuggetsionsですか? –

6

「ffffff」は必要なものです。

return DateTime.Now.ToString("HH:mm:ss.ffffff"); 
+0

私はそれを計算しないのと同様に、常にマイクロ秒でゼロを出力するという問題を使用しました。 –

+0

これは書式設定に問題はありませんが、これはDateTime.Nowの精度に問題があります。 System.Diagnostics.Stopwatchを使用してみてください。 –

+0

私は別のウィンドウ(私は眺めです)を試してみました。解像度はmicrseconds –

18

ジョンソンティックがマイクロ秒変換を動作させることができませんでした。ここで私はダニやストップウォッチを使用することによってマイクロ秒とナノ秒の分解能を測定することができた方法です:

Stopwatch sw = new Stopwatch(); 
sw.Start(); 

// Do something you want to time 

sw.Stop(); 

long microseconds = sw.ElapsedTicks/(Stopwatch.Frequency/(1000L*1000L)); 
long nanoseconds = sw.ElapsedTicks/(Stopwatch.Frequency/(1000L*1000L*1000L)); 

Console.WriteLine("Operation completed in: " + microseconds + " (us)"); 
Console.WriteLine("Operation completed in: " + nanoseconds + " (ns)"); 
+0

です。sw.Elapsed.TotalMillisecondsは素晴らしいです。その後、1000で割ってマイクロ秒を取得します。 – rocketsarefast

+0

(Stopwatch.Frequency /(1000L * 1000L))が長い値であるために、上記の行の方程式の結果が技術的に2.8576であれば、例えば10進数の後にすべてが残るため、 3 sw.ElapsedTicksは2.8でなく2で除算されますが、これは完全に間違っています。 – user2913184

関連する問題