2015-05-28 242 views
0

我已經使用System.Diagnostics命名空間與我們的軟件存在問題的客戶進行了一些性能日誌記錄。將日期時間戳轉換爲日期時間

我已經設置了一些東西,以便.NET自動將當前時間戳添加到日誌條目traceOutputOptions="Timestamp",但我無法將時間戳轉換回日期時間進行顯示(它總是給出我從0000年開始的日期)。

這似乎不是一個問題,因爲文檔說它只是從DateTime.Now的剔號。所以,即使他們是相對的,我也認爲我至少可以確定兩個條目之間的時間間隔。

我已經將DateTime標誌添加到配置中,試圖弄清楚如何去做,它看起來像這些愚蠢的診斷時間戳是300納秒而不是100納秒。情況總是如此嗎?因爲我真的不想回顧客並重做日誌!

編輯:密碼......不知道你想看到什麼。這裏是新的app.config部分:

<system.diagnostics> 
<trace autoflush="true" indentsize="3" /> 
<sources> 
    <source name="Application" switchValue="All"> 
    <listeners> 
     <remove name="Default" /> 
     <add name="shared" /> 
    </listeners> 
    </source> 
    <source name="Library" switchValue="All"> 
    <listeners> 
     <remove name="Default" /> 
     <add name="shared" /> 
    </listeners> 
    </source> 
</sources> 
<sharedListeners> 
    <add name="shared" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="app.log" 
     traceOutputOptions="Timestamp,DateTime" /> 
</sharedListeners> 
</system.diagnostics> 

而這正是我試圖把時間戳爲日期時間:

long lTS = Int64.Parse(strTS); 
var dt = new DateTime(lTS); 
+4

你能不能展示相關的代碼? –

回答

3

this msdn page,書面的時間戳的返回值GetTimestampStopwatch類的方法。

時間戳|寫出時間戳,它由GetTimestamp方法的返回值表示。

這意味着它不一個 UNIX時間戳,但計時器滴答數:

獲取定時器機制蜱的當前數量。

注意,你得到的數量取決於定時器的分辨率,作爲GetTimeStamp()方法的文檔的講話中提到:

如果Stopwatch類使用高分辨率的性能計數器,GetTimestamp回報該櫃檯的當前價值。如果Stopwatch類使用系統計時器,則GetTimestamp將返回DateTime.Now實例的當前DateTime.Ticks屬性。

因此,這不是DateTime值,而是TimeSpan值。

因爲您在traceOutputOptions配置中指定了DateTime選項,所以使用您已有的DateTime值。

+1

OP沒有將日期時間值添加到日誌中。問題就在於此。我擔心他將不得不重做演出,以獲得適當的價值。 – Kryptos

+0

現在你已經寫了,我在問題的文本中看到它。如果格式良好,我可能不會輕易錯過。不過,我仍然認爲我的回答可以幫助他理解並解決他的問題。 –

+0

問題是,當我添加DateTime和Timestamp標誌時,這兩個值與文檔所述內容不匹配。我的時間戳值不是TimeSpan記號。爲什麼? – Kempeth