我有一个布尔告诉我,如果当前时间介于两个其他时间之间,它会在晚上8点(20点)变暗,早上7点点亮。我不确定是否应该做7或07我试过摊位但仍然变得虚假?
有谁能告诉我为什么这总是返回假?没有什么可说的,只是当它目前处于两次之间时总是返回假.. GTM Timezone London,谢谢!
public static bool NightTime
{
get
{
TimeSpan span = LastMoodlightUpdate - DateTime.Now;
TimeSpan start = new TimeSpan(20, 0, 0); //Dark at 20:00
TimeSpan end = new TimeSpan(07, 0, 0); //Light at 07:00
TimeSpan now = DateTime.Now.TimeOfDay;
return ((now > start) && (now < end));
}
}
答案 0 :(得分:7)
这里的问题是比较两个TimeSpan
值是一个简单的数值比较。
因此,就价值而言,没有时间可以大于20:00且小于07:00。我们人类可以处理这种不协调,但计算机却不能。
你需要在这里考虑你想要的东西:
|---------|..................................|-----------|
00 07 20 24
你想要破折号的时间,基本上你应该使用||
而不是&&
:
return (now > start) || (now < end);
由于时间不能为负,也不能达到24:00或更高,这将给你你想要的。
答案 1 :(得分:1)
我没有达到你所有代码的目的。这不简单吗?
public static bool NightTime
{
get
{
var hour = System.DateTime.Now.Hour;
return (hour <=7 || hour >= 20);
}
}