2014-02-22 205 views
0

我正在將程序事件寫入txt文件作爲日誌,但時間戳未在每個點更新。我宣佈以下字符串:C#時間戳問題

string timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff"); 
string taskComplete = (timeStamp) + " Task Complete"; 

對此我在不同的點通過該計劃呼籲:

using (StreamWriter w_Log = new StreamWriter(file_Log, true)) 
      { 
       w_Log.WriteLine(taskComplete); 
       w_Log.Close(); 
      } 

有使用timeStamp雖然程序以及申報幾個字符串。下面是日誌文件的例子:

2014/02/22 10:07:26.71 Process started 
2014/02/22 10:07:26.71 Task Complete 
2014/02/22 10:07:26.71 Task Complete 
2014/02/22 10:07:26.71 Process complete, time elapsed: 0.496 seconds 

正如你所看到的,時間似乎即使它採取了49ms完成靜態的。當程序再次運行時,時間已經改變爲當前時間,但同樣的問題,所寫的時間始終是相同的。

我需要使用不同的方法,還是我錯誤地使用了這個方法?

回答

6

所以,在步驟1中你定義一個字符串作爲具有特定格式

DateTime.Now在每個p oint,你只是顯示相同的字符串。字符串是固定的,每次運行時都不會調用DateTime.Now

所以,如果你想讓它改變 - 你將需要每次撥打DateTime.Now

w_Log.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff") + " Task Complete "); 
+0

字符串的方法有沒有辦法將其設置爲可被稱爲功能它在整個程序中使用多次? –

+0

當然,有一個由psubsee2003創建的函數「包裝器」的答案。儘管據我所知,沒有內置功能。 – Haedrian

+0

現在每次都使用它。代碼現在已經全部散佈,所以我們將通過psubsee2003來回顧一下它的回答,看看它是否會整理一些代碼。 –

1

,你應該要更新日誌,你是你的類的實例的生命週期中,現在做變量timeStamp是固定的,每次重新定義你的字符串

string timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff"); 
string taskComplete = (timeStamp) + " Task Complete"; 

//這裏,當你調用日誌方法

using (StreamWriter w_Log = new StreamWriter(file_Log, true)) 
      { 

       timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff"); 
        taskComplete = (timeStamp) + " Task Complete"; 
       w_Log.WriteLine(taskComplete); 
       w_Log.Close(); 
      } 
2

您正在將taskComplete定義爲一個字符串,並一次又一次地使用它。無論您如何定義它,它都不會更新。您現在可以設置一次,並將該方法保持運行10年,並且它仍將包含相同的值。

實際上,您每次需要更新時間戳值時都需要更新它。如果你試圖限制這種方法的代碼,你可以做的是改變taskComplete到返回與更新的時間戳

void SomeMethod() 
{ 
    //doing other stuff 
    using (StreamWriter w_Log = new StreamWriter(file_Log, true)) 
    { 
     w_Log.WriteLine(GetTaskCompleteMessage()); 
     w_Log.Close(); 
    } 
    //doing other stuff 
} 

String GetTaskCompleteMessage() 
{ 
    string timeStamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.ff"); 
    return = (timeStamp) + " Task Complete"; 
}