2014-02-22 206 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"; 
}