我有一个功能需要在2个不同的时间段上运行。时段8 AM-12AM,12:00AM-8AM。
我现在有1个计时器,每1小时运行24/7。
我如何将此计时器分为两个独立的时间段?
我有一个预先编写的代码,但是我认为这不是一种有效的方法,所以我想问社区是否有更有效的方法来做到这一点。
下面是我的代码示例
if (DateTime.Now.Hour == 8 && DateTime.Now.Minute == 0)
{
LogMessageToFile("Running Peak Period - Period 1");
LogMessageToFile("Check will now do every 1 count");
//Code here
--SomeCodes--
}
else if (DateTime.Now.Hour == 0 && DateTime.Now.Minute == 0)
{
LogMessageToFile("Running Night Period - Period 2");
LogMessageToFile("Check will now do every 3 count");
//Code here
--SomeCodes--
}
我看到我的代码只有在上午8点和上午12点才运行一次。 结果应该是它运行了整个周期。
即上午8点至午夜12点,然后午夜12点至上午8点。
答案 0 :(得分:1)
我建议尝试“较少”的比较,而不是等比。例如
if (DateTime.Now.Hour >= 8 && DateTime.Now.Hour <= 12) // this means condition that current time is between 8 and 12 hours
{
//Period #1
}
else
{
//Period #2
}
upd:误读了您的问题。如果您希望代码在8 AM到12 PM 之间执行,则应根据24小时制确定条件,例如:
if (DateTime.Now.Hour > 0 && DateTime.Now.Hour <= 8)
{
//Night time
}
else
{
//Peak time
}
答案 1 :(得分:0)
解决方案:
将“计时器间隔”设置为60分钟,然后将以下代码放入“计时器滴答”事件处理程序中。
int hour = DateTime.Now.Hour;
if ((hour > 8 && hour <= 23) || hour == 0) Console.WriteLine ("Work time");
if (hour > 0 && hour <= 8) Console.WriteLine ("Sleep time");