C#时间布尔总是返回false

C#时间布尔总是返回false,c#,C#,我有一个bool告诉我,如果当前时间介于另外两个时间之间,那么它将在晚上8点(20:00)变暗,在早上7点变亮。。我不确定我是否应该做7或07我试过booth但仍然得到错误 有人能告诉我为什么这总是返回错误吗?没有什么可以说的,只是当它当前处于两次之间时,它总是返回false。。GTM时区伦敦,谢谢 public static bool NightTime { get { TimeSpan span = LastMoodlightUpdate - DateTime

我有一个bool告诉我,如果当前时间介于另外两个时间之间,那么它将在晚上8点(20:00)变暗,在早上7点变亮。。我不确定我是否应该做7或07我试过booth但仍然得到错误

有人能告诉我为什么这总是返回错误吗?没有什么可以说的,只是当它当前处于两次之间时,它总是返回false。。GTM时区伦敦,谢谢

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=LastMoodlightUpdate-DateTime.Now;
TimeSpan开始=新的TimeSpan(20,0,0);//20:00时变暗
TimeSpan end=新的TimeSpan(07,0,0);//07:00亮起
TimeSpan now=DateTime.now.TimeOfDay;
返回((现在>开始)&(现在<结束));
}
}

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

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

你需要考虑一下你想要什么:

|---------|..................................|-----------|
00        07                                 20          24
如果希望时间以破折号表示,基本上应该使用
|
而不是
&&

return (now > start) || (now < end);
返回(现在>开始)| |(现在<结束);

由于一天中的时间不能为负,也不能达到24:00或更高,这将为您提供所需的信息。

我不明白您所有代码的用途。不是这么简单吗

public static bool NightTime
{
    get
    {
        var hour = System.DateTime.Now.Hour;
        return (hour <=7 || hour >= 20);
    }
}
公共静态布尔夜间
{
得到
{
var hour=System.DateTime.Now.hour;
返回时间(小时=20);
}
}

一个东西怎么能同时大于20和小于7?介于两者之间。。晚上8点,早上7点。。这很容易发生,因为你比较的是时间跨度而不是日期。这很奇怪。是的
TimeSpan
s表示时间量。没有具体的时间。使用
DateTime
我们完全理解问题所在,但时间跨度比较仍然是一个简单的数字比较。不能同时大于20和小于7。您想要的是
|
,而不是
&&
。这使得被破坏的代码可以工作(并赢得我的支持),但从概念上讲,使用类型实现其预期目的还是更好的。TimeSpan是作业的错误结构。在.NET framework中没有正确的类型来处理时间。考虑到
TimeOfDay
属性返回一个
TimeSpan
,我认为他做的一切都是对的。我们都希望框架中有单独的
Date
Time
类型,但实际上没有。