有人可以帮我实现类似日间变化事件(只有1个事件,功能)吗?我只需要这个...
有人可以帮我创建算法吗?
我将创建一个Logger系统,将所有事件记录在日志文件中,如“28-06-2013”。我需要建立一个事件系统来理解日期变化并创建一个新的日志文件。
我试过制作一个System.Timers.Timer,但这不是一个好方法。我会做一个等待(睡眠)直到x秒的线程。 (x =直到第二天的毫秒)
编辑:我不会检查第一个日期和DateTime.Now!因为我需要在每x秒后调用此方法,但我需要一个像“Thread.Sleep(x);”这样的答案。执行!即性能对我来说很重要(我将在网络项目中使用此实现)
答案 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#))