簡體   English   中英

C#檢查Datetime.now是否為特定時間

[英]C# check if Datetime.now is a specific time

我想檢查當前時間是否為特定時間,例如,如果當前時間為13:13:13 ,它將發出蜂鳴聲

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

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

但它不起作用

讓您的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();
}

在檢查==您實際上比較了刻度 :如果

 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;
        }
    }

時間可以分為非常非常小的部分。 您需要確定可以的時間分辨率。 如果是同一時間倒數第二秒,是否應該發出蜂鳴聲? 還是應該將同一時間縮短到毫秒? 還是納秒?

一旦確定,就需要將xx值聲明為該精度,然后在循環中將DateTime截斷。現在為所需精度。 然后,您的比較將完成您想要的。

有很多方法。

  • 您可以使用任務計划程序創建計划任務
  • 或者可以將Quartz.Net Cron與Quartz一起使用
  • 或只是睡覺:

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

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

    Console.Beep();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM