2015-04-03 3 views
2

У меня есть bool, который говорит мне, если текущее время находится между двумя другими временами, оно потускнеет в 8 (20:00) вечером и светит в 7 утра .. I я не уверен, должен ли я делать 7 или 07, я пробовал стенд, но все еще ошибаюсь?C# время bool всегда возвращает false

Может ли кто-нибудь сказать мне, почему это всегда возвращает ложь? Не так много, чтобы сказать, что это всегда возвращает ложь, когда она находится между двумя раз в настоящее время. 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)); 
    } 
} 
+8

Как может быть чем-то больше 20 и меньше 7 в то же время? –

+0

Между ними стенд .. 8 вечером и 7 утра .. Это довольно легко для этого. – user4746801

+1

Вы сравниваете TimeSpans, а не Dates. Это странно. – adv12

ответ

7

Проблема здесь состоит в том, что сравнение двух значений TimeSpan простое сравнение чисел.

Таким образом, время не может быть больше 20:00 и меньше, чем в 07:00 с точки зрения значений. Мы, люди, можем справиться с такими несоответствиями, но компьютер не может.

Вы должны рассмотреть то, что вы хотите здесь:

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

Вы хотите, чтобы раз в тире, в основном вы должны использовать || вместо &&:

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

Поскольку время суток не может быть отрицательный, и он не может достигнуть 24:00 или выше, это даст вам то, что вы хотите.

+0

Это приводит к тому, что обработанный код работает (и зарабатывает мое повышение), но концептуально было бы лучше использовать типы по назначению. TimeSpan - это просто неправильная структура для работы. – adv12

+0

Нет правильного типа, встроенного в платформу .NET, для обработки времени. Учитывая, что свойство TimeOfDay возвращает «TimeSpan», я говорю, что он все сделал правильно. Мы все могли бы пожелать, чтобы в структуре были отдельные типы 'Date' и' Time', но их нет. –

1

Я не понимаю цели вашего кода. Разве это не так просто?

public static bool NightTime 
{ 
    get 
    { 
     var hour = System.DateTime.Now.Hour; 
     return (hour <=7 || hour >= 20); 
    } 
} 
Смежные вопросы