2009-07-30 30 views
33

Ich suche, wie man Zeit einschließlich Mikrosekunden formatiert. Ich benutze Klasse DateTime, es erlaubt (mit Eigenschaften), Daten bis Millisekunden zu erhalten, was nicht genug ist. Ich habe versucht, Ticks zu verwenden, aber ich wusste nicht, wie man es in Mikrosekunden übersetzt.C# Zeit in Mikrosekunden

+4

Seien Sie vorsichtig mit DateTime.Now, ist es nicht genau auf die Mikrosekunde. Versuchen Sie System.Diagnostics.Stopwatch, um die Zeit zu ergreifen. Stellen Sie außerdem sicher, dass Sie eine hochauflösende Systemuhr haben. –

+0

Ja, Sie haben Recht. Ich brauchte meine Zeit, um diesen Kommentar zu verstehen. Obwohl es die Zeit in Mikrosummen darstellt, ist die Zeit nicht in Mikrosekunden. –

Antwort

71

Sie "ffffff" in einem Format-String verwenden können Mikrosekunden darstellen:

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

Um eine Anzahl von Ticks zu Mikrosekunden zu konvertieren, benutzen Sie einfach:

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

Wenn diese Ihnen nicht helfen, Bitte geben Sie weitere Informationen über genau das, was Sie versuchen zu tun.

EDIT: Ich multipliziert ursprünglich ticks von 1000 Genauigkeit zu verlieren, wenn TimeSpan.TicksPerMillisecond von 1000. Allerdings teilen, Es stellt sich heraus, dass die TicksPerMillisecond ist tatsächlich ein konstanter Wert von 10.000 - so dass Sie von 1000 ohne Probleme teilen können, und in Tatsache könnten wir einfach verwenden:

const long TicksPerMicrosecond = 10; 

... 

long microseconds = ticks/TicksPerMicrosecond; 
+0

Ich habe beide opyions benutzt das Problem ist, dass ich die Mikrosekunden immer Null bekomme. Es scheint, als ob es die Auflösung davon nicht bekommen kann. –

+2

Dann ist das kein Formatierungsproblem, es ist ein Auflösungsproblem. Woher bekommst du die Daten von Anfang an? Wenn Sie versuchen herauszufinden, wie lange etwas dauert, sollten Sie die Klasse "Stoppuhr" verwenden. –

+0

Nein. Ich brauche es nur für den Logger. Für jedes Ereignis im System gebe ich zu Beginn den Zeitpunkt ein, zu dem es passiert ist. Irgendwelche Vorschläge? –

6

"ffffff" ist, was Sie brauchen.

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

Ich benutzte es das Problem ist, dass es immer Null in den Mikrosekunden druckt, als ob es nicht berechnet. –

+0

Dies ist kein Problem mit der Formatierung, das ist ein Problem mit DateTime.Now Genauigkeit. Versuchen Sie es mit System.Diagnostics.Stopwatch. –

+0

Ich versuchte es ein anderes Windows (meins ist Vista) und es Auflösung der Mikrosekunden –

18

Ich war nicht in der Lage Johns zu micorosecond Umwandlung tick Arbeit zu bekommen. Hier ist, wie ich war in der Lage Mikrosekunde und Nanosekunden-Auflösung zu messen durch Zecken verwendet und die Stoppuhr:

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 ist nett. Dann dividiere durch 1000 um Mikrosekunden zu erhalten. – rocketsarefast

+0

Das ist nicht ganz richtig, weil (Stopwatch.Frequency/(1000L * 1000L)) ein langer Wert ist, hinterlässt alles nach einer Dezimalzahl, zum Beispiel wenn das Ergebnis der Gleichung in der Zeile (von meinem Kommentar) 2,8576 ist, was technisch ist 3 aber sw.ElapsedTicks werden durch 2 nicht 2.8 oder 3 geteilt, was völlig falsch ist. – user2913184

Verwandte Themen