C# C毫秒到第二天(从现在起)?

C# C毫秒到第二天(从现在起)?,c#,events,datetime,time,C#,Events,Datetime,Time,有谁能帮我实现一个只有一个事件的类似换日事件的函数吗?我只需要这个 有人能帮我创建一个算法吗 我将制作一个日志记录系统,将所有事件记录在一个日志文件中,如2013年6月28日。我需要制作一个事件系统来了解日变化并创建一个新的日志文件 我试过做一个System.Timers.Timer,但这不是一个好方法。我将创建一个线程,该线程将一直等待到x秒。x=到第二天的毫秒数 编辑:我不会检查第一个日期和日期时间的函数。现在!因为我可能需要每x秒调用一次这个方法,但我需要一个像线程一样的答案;实施也就是说

有谁能帮我实现一个只有一个事件的类似换日事件的函数吗?我只需要这个

有人能帮我创建一个算法吗

我将制作一个日志记录系统,将所有事件记录在一个日志文件中,如2013年6月28日。我需要制作一个事件系统来了解日变化并创建一个新的日志文件

我试过做一个System.Timers.Timer,但这不是一个好方法。我将创建一个线程,该线程将一直等待到x秒。x=到第二天的毫秒数

编辑:我不会检查第一个日期和日期时间的函数。现在!因为我可能需要每x秒调用一次这个方法,但我需要一个像线程一样的答案;实施也就是说,性能对我很重要,我将在网络项目中使用此实现,您可以使用:

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

double durationUntilTomorrow = (tomorrow - now).TotalMilliseconds;
我将制作一个日志记录系统,将所有事件记录在一个日志文件中,如2013年6月28日。我需要制作一个事件系统来了解日变化并创建一个新的日志文件

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


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

制作一个线程或计时器来检查类似的内容:

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
    }
}

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

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


简单、有效。

记下当前日期,然后启动计时器,比较日期,直到发生变化。你的问题应该是你遇到的特定问题,而不是你希望其他人为你实施的一般要求。你试过什么?你有没有考虑过制定计划任务,而不是让程序全天候运行?-3哈?我需要帮助,请宽容一点!正如封闭的理由所说:问题必须证明对所解决问题的最低理解。告诉我们你试过做什么,为什么不起作用,以及它应该如何起作用。另请参见:堆栈溢出问题检查表。这是一个请给我的代码问题,没有任何努力显示。你是在windows应用程序或网络上工作???你甚至还没有写下你尝试过的东西!!!任何基于计算从现在到下一个日期更改的时间的技术,在遇到意外的时间更改(如夏令时和NTP更新)时注定会失败。这将始终给出一个负数,因为在这种情况下,明天将始终为0。您的明天计算与TimeSpan明天相同=新TimeSpan 0,0,0;嗯,不行。它提供了类似于'-70000000'的输出。如果您试图完成的是在第二天发生的事件上滚动日志,则最好只保留当前日期,并在下一个事件发生时检查datetime。现在要查看日期是否已更改,如果已更改,请启动一个新的日志文件。不需要定时器。sry我没有测试代码。嗯。。。我认为这一切都没有抓住要点。OP表示,他的目标是将事件记录在每日日志中,。如果您只需从事件发生时的当前日期创建日志文件名并将事件写入该文件,则计时器或睡眠是一种浪费。不需要知道它是什么时间。我认为定时器是更好的选择…我认为这不是一个好方法,因为我必须在每x秒后调用这个函数。必须有一个1函数才能像线程一样执行此操作;。但我认为这段代码在2天后将无法正常工作。我说的对吗?不,这个代码应该可以无限期地工作。为什么您认为它在两天后停止工作?因为DateTime.MinValue?DateTime.MinValue只是一个初始值。如果你愿意,你可以把它改为DateTime.Now.Date.但那不行。如果时间意外更改夏时制、NTP更新、用户更改时钟,则该操作将失败。@JimMischel是的,您是对的,但我将在作为网络服务器的VPS中运行此程序,则没有人会更改此操作。我还将添加一个日志文件名检查器,用于检查旧文件名和新文件名。如果它们相同,我将重新调用此函数:也许我可以修复您的problem@MehmetFatihMarabaoğlu:甚至服务器也会得到NTP更新。并且,根据服务器的不同,可能需要夏时制更新。这两个都是自动的。是的,你也许能够解决这个问题,但你仍然使它比需要的复杂得多。为什么在不需要线程或计时器的情况下使用它们?@JimMischel是的,你说得对。
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;
}