Attenzione alle logiche negli if con i controlli sugli orari. Essi sono condizioni particolari da controllare.
L'esempio di willy non è particolarmente complicato perché deve accendere dalle 6:00 alle 12:00 ma se doveva accendere dalle 6:00 alle 10:10 il suo controllo non funziona.
se (6 >= 6 e 28 >= 0) e (6 <= 11 e 28 <= 10)
Vedete che nella seconda condizione, 28 non può essere minore o uguale a 10.
Io consiglio sempre di separare i 2 test, quelli sulle ore e quelli sui minuti. Prima si controlla se le ore sono comprese nell'intervallo e poi si controllano i minuti:
if ((ore >= orarioInizio) && (ore <= orarioFine)) {
if ((minuti >= minutiInizio) && (minuti <= minutiFine)) {
....
}
}
Un'alternativa è quella di convertire l'orario nell'elemento più piccolo. Ad esempio se si deve fare un controllo su ore:minuti si trasforma tutto in minuti prima del check, usando poi un solo if. Esempio:
orario = (ore*60) + minuti
if (orario >= orarioInizio) && (orario <=orarioFine)) {
..
}
Se si usano anche i secondi:
orario = (ore*3600) + (minuti*60) + secondi
if (orario >= orarioInizio) && (orario <=orarioFine)) {
..
}
Ovviamente orarioInizio e orarioFine sono anch'essi calcolati con la stessa unità di misura.