if (9 <= hours <= 17 & 0 <= min <= 59)
Объясню подробно почему это не работает.
Допустим hours = 27, а min = 90, тогда
if (9 <= 27 <= 17 & 0 <= 90 <= 59) тогда
if (true <= 17 & true <= 59), тогда т.к. true = 1
if (1 <= 17 & 1 <= 59) тогда
if (true & true) => if (1 & 1)
в результате побитового сложения получаем if (1) => true => тело блока выполнится
Второй пример
Допустим hours = 1, а min = -1, тогда
if (9 <= 1 <= 17 & 0 <= -1 <= 59) тогда
if (false <= 17 & false <= 59) тогда
if (0 <= 17 & 0 <= 59) тогда
if (true & true) тогда
if (1 & 1)
if (1)
true
Т.е. какие бы значения вы не подставляли, блок выполнится всегда