我试图比较一个运行时变量是否在现在和一分钟之内。这是代码:
if (RunTime.ToUniversalTime() >= now.ToUniversalTime() &&
RunTime.ToUniversalTime() < now.AddMinutes(1).ToUniversalTime())
{
//Do Stuff
}
然而,在我预期之前一分钟评估为真。例如,如果我的运行时间为9:30,则从9:29到9:30而不是9:30 - 9:31评估为真。我在这里失踪了什么?我理解代码的方式是,当运行时大于或等于现在且小于现在加上一分钟时,它将评估为true。
答案 0 :(得分:3)
RunTime.ToUniversalTime() >= now.ToUniversalTime() &&
RunTime.ToUniversalTime() < now.AddMinutes(1).ToUniversalTime()
让我们改写这个条件:
now.ToUniversalTime() <= RunTime.ToUniversalTime() &&
now.ToUniversalTime() > RunTime.AddMinutes(-1).ToUniversalTime()
因此当RunTime
为9:30时,条件应该从RunTime.AddMinutes(-1)
(9:29)独占到RunTime
(9:30)包含。就像你说它在你的帖子中一样。
如果您在9:30到9:31之间的条件是真的,那么您应该使用不同的条件:
now.ToUniversalTime() >= RunTime.ToUniversalTime() &&
now.ToUniversalTime() < RunTime.AddMinutes(1).ToUniversalTime()
答案 1 :(得分:2)
由于您正在使用DateTime.Now
,因此您永远不会在同一时间准确降落。考虑这两种情况:
Case 1 (what you're experiencing)
now: 9:29:01
runtime: 9:30:00
now+1: 9:30:01
Case 2 (what you want but doesn't work)
now: 9:30:01
runtime: 9:30:00
now+1: 9:31:01
尝试显式设置now变量,并制作一些应该发生的逻辑表。您将更好地了解要创建的规则。
答案 2 :(得分:1)
以下代码按预期工作(即打印&#34;第二个真实&#34;而不是&#34;第一个真实&#34;):
DateTime nine29 = new DateTime(2015, 01, 01, 09, 29, 00);
DateTime nine30 = new DateTime(2015, 01, 01, 09, 30, 00);
DateTime runtime = nine30;
if (runtime.ToUniversalTime() >= nine29.ToUniversalTime() && runtime.ToUniversalTime() < nine29.AddMinutes(1).ToUniversalTime())
Console.WriteLine("First true");
if (runtime.ToUniversalTime() >= nine30.ToUniversalTime() && runtime.ToUniversalTime() < nine30.AddMinutes(1).ToUniversalTime())
Console.WriteLine("Second true");
因此,当你说&#34时,我们必须假设你错了;如果我的运行时间为9:30,则从9:29到9:30而不是9:30 - 9:31评估为真&#34;
将所有时间放入变量并将其打印到调试窗口或控制台,或在调试器下运行并检查它们。并注意秒!
答案 3 :(得分:0)
我喜欢在进行日期时间比较时使用TimeSpan类型。
TimeSpan timeSpan = Runtime.ToUniversalTime().Subtract(now.ToUniversalTime());
if (timeSpan > 0 && timeSpan <= 1)
{
//Code here
}