![](/img/trans.png)
[英]Calculate difference between DateTime.Now and time(7) value in C#?
[英]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截斷。現在為所需精度。 然后,您的比較將完成您想要的。
有很多方法。
或只是睡覺:
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.