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));
}
}
这里的问题是比较两个TimeSpan
值是一个简单的数字比较。
因此,就价值而言,任何时间都不能大于20:00并且小于07:00。我们人类可以处理这种不协调,但计算机不能。
你需要考虑你想要什么位置:
|---------|..................................|-----------|
00 07 20 24
你想在划线的时候,基本上你应该使用||
而不是&&
:
return (now > start) || (now < end);
由于一天的时间不能消极的,也不能达到24:00或更高,这会给你你想要的。
这使得破解的代码工作(并赢得了我的upvote),但从概念上来说,使用类型实现其预期目的仍然会更好。 TimeSpan只是这个工作的错误结构。 – adv12 2015-04-03 21:35:51
.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);
}
}
如何能同时大于20和小于7? – 2015-04-03 21:19:14
在他们之间的展位..晚上8点,早上7点..这很容易发生 – user4746801 2015-04-03 21:19:56
你比较TimeSpans而不是日期。这是奇特的。 – adv12 2015-04-03 21:19:57