如何基于2小时设置计时器?

时间:2019-07-17 07:37:19

标签: c# datetime timer visual-studio-2019

我有一个功能需要在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点。

2 个答案:

答案 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");