我有一个 Windows 服务,我想插入一个计时器。如何检查当前时间是否为9:00 AM
?我希望我的服务人员每天都检查一下。十分感谢
我的尝试:
Datetime dt=Datetime.parse("09:00:00 everyday");
if(datetime.now -dt ==0)
{
//fire event
}
不过这对我来说有点傻。
我有一个 Windows 服务,我想插入一个计时器。如何检查当前时间是否为9:00 AM
?我希望我的服务人员每天都检查一下。十分感谢
我的尝试:
Datetime dt=Datetime.parse("09:00:00 everyday");
if(datetime.now -dt ==0)
{
//fire event
}
不过这对我来说有点傻。
您需要制作一个计时器并将其间隔设置为从现在到明天上午 9:00 之间的时间跨度。下次计时器滴答时,以相同方式再次设置间隔。您应该使用这个 Timer 类:http: //msdn.microsoft.com/en-us/library/system.timers.timer.aspx
请使用 DateTime.UtcNow.Hour 检查当前时间
通过使用 UtcNow,您将获得一个 DateTime 对象,该对象设置为计算机上的当前日期和时间,表示为协调世界时 (UTC)。
var now = DateTime.Now;
var today = now.Date;
var nineAm = today.AddHours(9);
TimeSpan ts = nineAm - now;
var timeInMillisecondsTill9Am = ts.Milliseconds;
If(timeInMillisecondsTill9Am==0)
{
//your code goes here
}
由于您不知道何时有人可能会关闭或重新启动您的计算机或服务,因此您需要确保使用一种足够强大的方法来处理这些类型的中断。
我建议您的服务每 5 分钟左右检查一次,如果时间在上午9 点之后并且最后运行日期是昨天。如果是这样,您将上次运行日期更新为当天(可能在一个简单的文本文件中),然后运行“9:00am”任务。通过这种方式,您的任务每天只运行一次,非常接近上午 9 点,并且对重新启动非常有效。
您需要使用标准的 .NET 计时器来触发检查 - 如果您足够聪明,您可以让它在上午 9 点后触发几秒钟。
让我知道这是否是一个好的解决方案。