C#time bool总是返回false

时间:2015-04-03 21:17:59

标签: c#

我有一个布尔告诉我,如果当前时间介于两个其他时间之间,它会在晚上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));
    }
}

2 个答案:

答案 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);
    }
}