C#时间戳问题

时间:2014-02-22 10:38:57

标签: c# logging time

我正在将程序事件写入txt文件作为日志,但时间戳不会在每个点更新。我已经声明了以下字符串:

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

正如您所看到的,即使完成了49毫秒,时间似乎也是静态的。当程序再次运行时,时间已经变为当前时间,但同样的问题,写入的时间始终相同。

我是否需要使用其他方法,或者我是否错误地使用了这种方法?

3 个答案:

答案 0 :(得分:7)

因此,在步骤1中,您将字符串定义为具有特定格式的DateTime.Now

在每一点上,你只是显示相同的字符串。字符串是固定的,每次运行时都不会调用DateTime.Now

因此,如果您希望更改 - 您每次都需要致电DateTime.Now

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

答案 1 :(得分: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";
}

答案 2 :(得分:1)

每次要更新日志时都应重新定义字符串,因为现在变量timeStamp已在类实例的生命周期内得到修复

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

//在这里调用log方法

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();
            }