2016-06-30 158 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」,則第一個結果是一個標題爲「如何:顯示日期和時間值的毫秒數」的頁面,它與答案相同。去文檔的一個好處是,你可以得到你正在尋找的答案,但是你也可以發現你可以使用的其他東西,然後當你需要時可以記住它們。 –

+0

是的你對我感到愚蠢。我認爲解決方案就像秒錶「_stopwatch.Elapsed.TotalMilliseconds.ToString()」(我試過但它沒有工作..),很難找到一種方法來適應你的谷歌代碼。不管怎樣,謝謝你 !! – jsls

回答

4

您可以使用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每個線程量只更新一次。在多核機器上的Windows上,線程量程爲15毫秒;每10毫秒單核機器。

秒錶具有非常高的精度和非常高的精度,因此可以做得更好。舉例說明。

如果你有一個真正的秒錶,你可以以某種方式使用,並獲得1毫秒的精度和準確性,你可以採取鬧鐘,只顯示小時和分鐘,做得更好嗎?

您可以。您可以使用秒錶非常準確地測量時間流逝。而且你可以看鬧鐘,看看從上午11:14到上午11:15的時間。

舉例來說,如果你遵守以下事件集:

  • 閱讀秒錶:12000毫秒
  • 讀時鐘:11:14
  • 讀時鐘:上午11:15
  • 閱讀秒錶:12002毫秒

然後你知道在那裏的某處,時間恰好是11:15:00.0000 ......並且你知道它發生了在只有2毫秒的時間內,因爲你的秒錶告訴你。

所以,現在你知道,秒錶值12001 +/- 1毫秒== 11:15:00.000000

你可以把這個相同的概念,以DateTime.UtcNow()和秒錶。

如果您在循環中讀取秒錶和utcnow,並且您看到UtcNow在11:14:31.030到11:14:31.045之間打勾,那麼您知道在那裏的某個時間恰好是31.04500000 - 而且您的秒錶會告訴你實際通過了多少實際時間,因此你知道你有多少錯誤。

+0

您是否看過帖子鏈接? (完全沒有冒犯這是一個真正的問題!!!),因爲回答它的人說這個「技巧」是避免UtcNow的線程量不準確的一種方法。 Personnaly我不能說你們哪一個是對的..(即時通訊在電腦世界是如此的新穎) 但是我明白你的意思,但實現它到我的代碼是相當複雜的(它已經是一個循環,我需要它快速非常快速,精確和準確)。我會嘗試它:) – jsls

+0

@jsls - 那傢伙是錯的。首先,UtcNow將在15毫秒的時間內返回相同的值,而Stopwatch(通過HighPerformanceCounter API)將返回最新的值。那是正確的錯誤,爲什麼如果你想要更多的準確性,你需要做我所描述的。其次,線程時序:操作系統不斷地根據需求和調度來切換CPU的線程和線程。在調用'DateTime.UtcNow'之後,但在調用'Stopwatch.StartNew()'之前,可能會從CPU中刪除線程。你沒有測量你的錯誤。 – antiduh