如何根据 2 小时设置定时器?

How to set timer based on 2 period of hours?

我有一个函数需要 运行 在 2 个不同的时间段。上午 8 点至上午 12 点时段 1,上午 12 点至上午 8 点时段 2。

我现在有 1 个计时器,每 1 小时 运行s 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 点。

我建议尝试 'more-less' 比较而不是 equal-comparison。例如

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
}

更新:误读了你的问题。如果您希望代码在上午 8 点到中午 12 点 下午 之间执行,那么您应该根据 24 小时时间格式制定条件,例如:

if (DateTime.Now.Hour > 0 && DateTime.Now.Hour <= 8)
{
  //Night time
}
else
{
  //Peak time
}

解决方案:

将计时器间隔设置为 60 分钟,并将以下代码放入 Timer Tick 事件处理程序中。

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