C#检查Datetime.now是否为特定时间

时间:2018-10-08 12:20:38

标签: c#

我想检查当前时间是否为特定时间 因此,例如,如果当前时间是13:13:13,它将发出哔哔声

var xx = new DateTime(2018,10,8,13,19,50);

while (true)
{
    if (DateTime.Now == xx)
        Console.Beep();
}

但它不起作用

4 个答案:

答案 0 :(得分:3)

让您的CPU休息一下。

static void Main(string[] args)
{
    var target = DateTime.Now.AddMinutes(1);  // test data

    var aTimer = new System.Timers.Timer((target - DateTime.Now).TotalMilliseconds);
    aTimer.Elapsed += (s, e) => { Console.Beep(); };
    aTimer.Enabled = true;

    Console.WriteLine("Wait a minute...");
    // time to do something useful
    Console.ReadLine();
}

答案 1 :(得分:1)

在检查==时,您实际上比较了滴答声:如果

 DateTime.Now == 2018-10-18 13:19:50.0000000

,因此只有微小概率退出Beep

 ...
 DateTime.Now == 2018-10-18 13:19:49.9999852
 DateTime.Now == 2018-10-18 13:19:49.9999989 // Transition: no beep here
 DateTime.Now == 2018-10-18 13:19:50.0000007 // infinte loop from now on
 ...

尝试其他测试(快速补丁Timer是更好的解决方案):

    var xx = new DateTime(2018,10,8,13,19,50);

    while (true)
    {
        // If DateTime.Now exceeds xx 
        if (DateTime.Now >= xx) {
            // bee..eep
            Console.Beep();

            // and break the loop  
            break;
        }
    }

答案 2 :(得分:0)

时间可以分为非常非常小的部分。您需要确定可以的时间分辨率。如果是同一时间倒数第二秒,是否应该发出蜂鸣声?还是应该将同一时间缩短到毫秒?还是纳秒级?

一旦决定,则需要将xx值声明为该精度,然后在循环中截断DateTime。现在为所需精度。然后您的比较就可以满足您的要求。

答案 3 :(得分:0)

有很多方法。

  • 您可以使用任务计划程序Creating Scheduled Tasks
  • 或可以使用Quartz.Net Cron with Quartz
  • 或者只是睡觉:

    var xx = new DateTime(2018,10,8,13,19,50);

    System.Threading.Thread.Sleep(新的TimeSpan(xx-DateTime.Now).TotalMilliseconds);

    Console.Beep();