C#时间布尔总是返回false

问题描述:

我有一个布尔告诉我,如果当前时间是在两个其他时间之间它将在晚上8(20:00)黑暗和早晨7点亮..我我不确定我是否应该做7或07我曾试过展位,但仍然是假的?C#时间布尔总是返回false

谁能告诉我为什么这总是返回false?没有什么其他的说真的只是当它目前在两次之间时它总是返回false .. GTM Timezone伦敦,谢谢!

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)); 
    } 
} 
+8

如何能同时大于20和小于7? – 2015-04-03 21:19:14

+0

在他们之间的展位..晚上8点,早上7点..这很容易发生 – user4746801 2015-04-03 21:19:56

+1

你比较TimeSpans而不是日期。这是奇特的。 – adv12 2015-04-03 21:19:57

这里的问题是比较两个TimeSpan值是一个简单的数字比较。

因此,就价值而言,任何时间都不能大于20:00并且小于07:00。我们人类可以处理这种不协调,但计算机不能。

你需要考虑你想要什么位置:

|---------|..................................|-----------| 
00  07         20   24 

你想在划线的时候,基本上你应该使用||而不是&&

return (now > start) || (now < end); 

由于一天的时间不能消极的,也不能达到24:00或更高,这会给你你想要的。

+0

这使得破解的代码工作(并赢得了我的upvote),但从概念上来说,使用类型实现其预期目的仍然会更好。 TimeSpan只是这个工作的错误结构。 – adv12 2015-04-03 21:35:51

+0

.NET框架中没有内置正确的类型来处理时间。考虑到'TimeOfDay'属性返回'TimeSpan',我说他做的都对。我们都希望框架中有单独的'Date'和'Time'类型,但是没有。 – 2015-04-03 21:37:04

我没有得到你所有代码的目的。这不是很简单吗?

public static bool NightTime 
{ 
    get 
    { 
     var hour = System.DateTime.Now.Hour; 
     return (hour <=7 || hour >= 20); 
    } 
}