C#毫秒直到第二天(从现在开始)?

时间:2013-06-28 16:42:10

标签: c# events datetime time

有人可以帮我实现类似日间变化事件(只有1个事件,功能)吗?我只需要这个...

有人可以帮我创建算法吗?

  • 我将创建一个Logger系统,将所有事件记录在日志文件中,如“28-06-2013”​​。我需要建立一个事件系统来理解日期变化并创建一个新的日志文件。

  • 我试过制作一个System.Timers.Timer,但这不是一个好方法。我会做一个等待(睡眠)直到x秒的线程。 (x =直到第二天的毫秒)

编辑:我不会检查第一个日期和DateTime.Now!因为我需要在每x秒后调用此方法,但我需要一个像“Thread.Sleep(x);”这样的答案。执行!即性能对我来说很重要(我将在网络项目中使用此实现)

4 个答案:

答案 0 :(得分:4)

您可以使用:

DateTime now = DateTime.Now;
DateTime tomorrow = now.AddDays(1).Date;

double durationUntilTomorrow = (tomorrow - now).TotalMilliseconds;
  

我将创建一个Logger系统,将所有事件记录在日志文件中,如“28-06-2013”​​。我需要建立一个事件系统来了解日期变化并创建一个新的日志文件。

鉴于您的目标是将其放入记录器中,在日志记录方法中处理此问题会更加清晰。如果跟踪上次写入时间,则可以在新日期调用日志记录方法后立即增加日志。

使用这种方法的唯一缺点是,如果一天没有发生日志事件 - 在这种情况下你不会为那天创建一个空的日志文件(这可能是好的,但可能不是,具体取决于根据你的需要)。

答案 1 :(得分:3)

最简单的方法是每次编写日志消息时保存日期。然后,当您要编写日志消息时,只需将当前日期与上一个日期进行比较。如果它们不匹配,请启动新的日志文件。不需要线程或任何东西。 。

private _lastWriteDate = DateTime.MinValue;

public void LogIt(string message)
{
    var nowDate = DateTime.Now.Date;
    if (nowDate != _lastWriteDate)
    {
        // close current log and open a new one
    }
    WriteLog(message);
    _lastWriteDate = nowDate;
}

简单,有效。

答案 2 :(得分:2)

 DateTime now = DateTime.Now;
 DateTime tomorrow = now.AddDays(1);
 TimeSpan duration = tomorrow.Date - now;

答案 3 :(得分:1)

创建一个类似于这样的东西的线程或计时器:

private DateTime today;
private void IsNextDay()
{
    if (DateTime.Now.Substract(today.Date.AddDays(1)).TotalMilliseconds <= 0)
    {
        today = DateTime.Now; //Next Date so you can check every day

        //FireCustom-Event or do your work here
    }
}

编辑: 根据您的编辑。你是否必须保持文件打开/或Db连接或类似的东西?如果不是,您可以使用实际日期编写每个日志条目。我的意思是这样的:

using (StreamWriter w = File.AppendText(#FileNameWithDateGoesHere#))