-4

任何人都可以帮我实现一个类似一天的变化事件(只有一个事件,函数)吗?我只需要这个...

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

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

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

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

4

4 回答 4

4

你可以使用:

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

double durationUntilTomorrow = (tomorrow - now).TotalMilliseconds;

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

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

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

于 2013-06-28T16:49:43.883 回答
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;
}

简单,有效。

于 2013-06-28T17:00:37.630 回答
2
 DateTime now = DateTime.Now;
 DateTime tomorrow = now.AddDays(1);
 TimeSpan duration = tomorrow.Date - now;
于 2013-06-28T16:45:49.240 回答
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#))
于 2013-06-28T16:54:11.593 回答