Karlo schrieb:
> Imho ist das ja eher ein mathematisches Problem. Es muss doch eine
> kurze, elegante Lösung dafür geben.
> Ich habe noch eine weitere Bekannte, nämlich die "Endzeit", nämlich
> 23:59. Danach springt meine Zeit wieder auf 00:00.
Gibt es auch.
Wieviele Minuten sind seit Mitternacht vergangen?
MinSinceMidnight = 60 * Stunde + Minuten;
dsselbe für die Einschaltzeit und die Ausschaltzeit und schon hast du
eine schöne lineare Zahl, die während des Tages von 0 bis 1339 anwächst
und mit der du wunderbar gegen 2 Grenzwerte vergleichen kannst (aben die
Einschalt bzw. Ausschaltzeit) vergleich kanns, ob die aktuelle Zeit
zwischen diesen beiden liegt oder nicht. Liegt sie dazwischen, dann
'Gerät ein'. Liegt sie nicht dazwischen dann 'Gerät aus'.
Wenn du nicht auf gemeinsame Minuten gehen willst, dann geht es fast
genau so einfach. Du musst dir nur darüber im klaren sein, wann genau
denn eine Zeit vor einer anderen liegt. Wenn die Stunden von A schon mal
kleiner sind als die Stunden von B, dann liegt A vor B. Sind die beiden
gleich, dann entscheiden die Minuten wer vorne liegt.
1 | if( actHour < onHour || ( actHour == onHour && actMin < onMin ) )
|
2 | TurnOff;
|
3 | else if( actHour > offHour || ( actHour == offHour && actMin > offMin ) )
|
4 | TurnOff;
|
5 | else
|
6 | TurnOn;
|
Die Phase rund um Mitternacht hab ich jetzt noch nicht vollständig
durchdacht, da es aber relativ selten vorkommt, dass man in dieser Zeit
schalten muss, ignoriere ich diesen Sonderfall mal.
D.h. wir tun so, dass man sich einen Tag hernimmt
1 | +------------------------------------------------+
|
2 | | |
|
3 | Ein Aus
|
Alles was zwischen Ein und Aus liegt ist die 'Gerät ist eingeschaltet'
Zeit. Alles was nicht zwischen diesen beiden Zeitpunkten liegt ist
'Gerät aus'. Also das hier
1 | +------------------------------------------------+
|
2 | ###############| |#############
|
3 | Ein Aus
|
stellst du also fest, dass die aktuelle Zeit vor 'Ein' liegt, also im
schraffierten Bereich ist, dann -> Gerät aus.
Selbiges für den Fall, dass die aktuelle Zeit nach 'Aus' liegt.
Und alles was dann noch übrig bleibt -> 'Gerät ein'
Du kannst jetzt den nicht schraffierten Teil nach links oder rechts
verschieben. Solange du dabei nicht über Mitternacht drüber kommst, gibt
es da kein Problem.