2009-07-30 40 views
33

Tôi đang tìm cách định dạng thời gian bao gồm micro giây. Tôi đang sử dụng lớp DateTime, nó cho phép (sử dụng các thuộc tính) để lấy dữ liệu cho đến mili giây, điều này không gây khó chịu. Tôi đã thử sử dụng Ticks, nhưng tôi không biết cách dịch nó thành micro giây.C# thời gian tính bằng micro giây

+4

Hãy cẩn thận với DateTime.Now, không chính xác đến micro giây. Hãy thử System.Diagnostics.Stopwatch để lấy thời gian. Ngoài ra, hãy đảm bảo bạn có đồng hồ hệ thống có độ phân giải cao. –

+0

Có, bạn đã đúng. Tôi đã mất thời gian để hiểu nhận xét này. Mặc dù nó thể hiện thời gian trong các vi mô, thời gian không phải là tính bằng micro giây. –

Trả lời

71

Bạn có thể sử dụng "ffffff" trong một chuỗi định dạng để đại diện cho micro:

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

Để chuyển đổi một số tick vào micro, chỉ cần sử dụng:

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

Nếu những không giúp bạn, vui lòng cung cấp thêm thông tin về chính xác những gì bạn đang cố gắng làm.

EDIT: Tôi ban nhân ticks 1000 để tránh mất độ chính xác khi chia TimeSpan.TicksPerMillisecond bởi 1000. Tuy nhiên, Nó chỉ ra rằng các TicksPerMillisecond thực sự là một giá trị không đổi là 10.000 - vì vậy bạn có thể chia cho 1000 với không có vấn đề, và trong thực tế chúng tôi chỉ có thể sử dụng:

const long TicksPerMicrosecond = 10; 

... 

long microseconds = ticks/TicksPerMicrosecond; 
+0

Tôi đã sử dụng cả hai opyions vấn đề là tôi nhận được micro giây luôn bằng không. Có vẻ như nó không thể giải quyết được điều đó. –

+2

Sau đó, đó không phải là một vấn đề định dạng, đó là một vấn đề giải quyết. Bạn lấy dữ liệu từ đâu để bắt đầu? Nếu bạn đang cố gắng để thời gian một cái gì đó mất, bạn nên sử dụng lớp 'Stopwatch'. –

+0

Không. Tôi chỉ cần nó cho logger. Đối với mọi sự kiện trong hệ thống tôi nhập vào lúc bắt đầu xảy ra. Bất kỳ sự thay đổi nào? –

6

"ffffff" là những gì bạn cần.

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

Tôi sử dụng nó vấn đề là nó luôn luôn in bằng không ở micro giây, giống như nó không tính toán nó. –

+0

Đây không phải là vấn đề với định dạng, đây là vấn đề với độ chính xác của DateTime.Now. Hãy thử sử dụng System.Diagnostics.Stopwatch. –

+0

Tôi đã thử nó một cửa sổ khác (của tôi là vista) và độ phân giải f miceconds –

18

Tôi không thể tải Johns để chuyển đổi micorosecond hoạt động. Dưới đây là cách tôi có thể đo độ phân giải Micro giây và Nanosecond bằng cách sử dụng bọ ve và Đồng hồ bấm giờ:

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 là tốt đẹp. Sau đó chia cho 1000 để nhận được micro giây. – rocketsarefast

+0

Điều này không hoàn toàn đúng, vì (Stopwatch.Frequency/(1000L * 1000L)) là một giá trị dài để lại mọi thứ sau một số thập phân, ví dụ, nếu kết quả của phương trình trong dòng trên (bình luận của tôi) là 2.8576. 3 nhưng sw.ElapsedTicks sẽ được chia cho 2 không 2,8 hoặc 3, đó là hoàn toàn sai. – user2913184

Các vấn đề liên quan