我想检查当前时间是否为特定时间
因此,例如,如果当前时间是13:13:13
,它将发出哔哔声
var xx = new DateTime(2018,10,8,13,19,50);
while (true)
{
if (DateTime.Now == xx)
Console.Beep();
}
但它不起作用
答案 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)
有很多方法。
或者只是睡觉:
var xx = new DateTime(2018,10,8,13,19,50);
System.Threading.Thread.Sleep(新的TimeSpan(xx-DateTime.Now).TotalMilliseconds);
Console.Beep();