Seite 1 von 1

Mal wieder die Uhrzeit

Verfasst: 20. Apr 2021 10:32
von Boris099
Hallo,
ich habe mal wieder eine Problem mit der Uhrzeit. Ich bin noch auf OH2.5.12.

Diese Regel benutze ich bisher innerhalb eines Tages, also ohne Tagesüberschreitung in den nächsten Tag hinein.

Code: Alles auswählen

if (now.getMinuteOfDay >= (15 * 60 + 30) && now.getMinuteOfDay <= (23 * 60 + 30))
wenn ich hier jedoch z.B. als Endzeit (01 * 60 +30) für 1h30 des nächsten Tages, einbaue stimmt das nicht mehr und die Regel
funktioniert auch nicht mehr. Nur wie komme ich über die Taggesgrenze damit?

Nach einiger Suche habe ich diese Regel nun gebaut, die stimmt aber irgendwie nicht, Licht ging gestern nach 24h nicht mehr an,
dafür aber heute morgen nach 9h, soll sie aber nicht!

Code: Alles auswählen

if (now.isAfter(now.withTimeAtStartOfDay.plusDays(1).minusHours(15)) && (now.isBefore(now.withTimeAtStartOfDay.plusDays(2).minusHours(23))))
Was ist denn daran falsch, wie lautet das korrekt, wenn die Regel zwischen 15h und 1h des nächsten Tages arbeiten soll?
Ach ja und gibt es da Unterschiede zwischen OH2.5 und OH3?

Re: Mal wieder die Uhrzeit

Verfasst: 20. Apr 2021 12:52
von KellerK1nd
Sollte das nicht funktionieren?

Code: Alles auswählen


if ((now.getMinuteOfDay >= (15 * 60 + 30)) && (now.getMinuteOfDay <= (23 * 60 + 30)))


Re: Mal wieder die Uhrzeit

Verfasst: 20. Apr 2021 13:29
von Boris099
Nee ich möchte nicht 23.30h sondern 01.00h nächster Tag, also Nacht

Re: Mal wieder die Uhrzeit

Verfasst: 20. Apr 2021 23:43
von udo1toni
Gewöhnlich sollte es reichen, zwei Bereiche mit anzugeben:

Code: Alles auswählen

if (now.getMinuteOfDay >= (15 * 60 + 30) || now.getMinuteOfDay <= (1 * 60 + 30))
Also entweder muss getMinuteOfDay größer als 15*60+29 sein, oder es muss kleiner 1* 60 + 31 sein.
Alternativ kannst Du tatsächlich mit now.minusMinutes arbeiten:

Code: Alles auswählen

if (now.minusMinutes(90).getMinuteOfDay > 14 * 60 -1)
Frei übersetzt: "wenn es vor 90 Minuten später als 13:59:59 Uhr war."
Um 01:30:00 Uhr "war es vor 90 Minuten" 0:00:00 Uhr, also früher als 13:59:59 Uhr :)
Um 15:30:00 Uhr "war es vor 90 Minuten" 14:00:00 Uhr, also später als 13:59:59 Uhr :)

Re: Mal wieder die Uhrzeit

Verfasst: 4. Mai 2021 21:13
von Boris099
Sorry für meine späte Reaktion, ich hatte soviel um die Ohren, dass ich keine Zeit fand das zu lesen.
Also zuerst Mal Vielen Dank, ich habe nun gerade das erst Beispiel eingebaut, und das Log meckert nicht, Licht geht an!
Natürlich muß ich das noch nach 24h testen, denn hier lag ja mein Problem.

Im Grunde genommen lag ich ja richtig, jedoch hatte ich anstatt || (das ist Alt 124, korrekt?) die beiden && verwendet.
Was ist denn daran falsch, und geht das auch unter OH3?

P.S. Das 2. Beispiel verstehe ich nicht, aber nicht so schlimm - das 1. geht ja für Normalos :D

Re: Mal wieder die Uhrzeit

Verfasst: 5. Mai 2021 13:26
von udo1toni
Das ist Bool'sche Algebra.

&& -> logisches UND, beide Bedingungen müssen erfüllt sein. (Eine Zahl kann nicht gleichzeitig größer als 10 UND kleiner als 2 sein)
|| -> logisches ODER, mindestens eine der beiden Bedingungen muss erfüllt sein.
! -> logisches NICHT, Die Bedingung darf nicht erfüllt sein.

Was das zweite Beispiel betrifft: was verstehst Du daran nicht? Die Idee dabei ist, eine der beiden Grenzen so zu verschieben, dass sie auf 0 Uhr landet. Wenn ich beispielsweise möchte, dass etwas zwischen 10 Uhr und 22 Uhr geschieht, kann ich zur aktuellen Uhrzeit zwei Stunden hinzuzählen und das Resultat darauf prüfen, ob es später als 12 Uhr ist. Ist das nicht der Fall, bedeutet dies, dass es entweder gerade vor 10 Uhr ist (12 - 2) oder nach 22 Uhr ist ((22+2)MOD24). Wenn die Obergrenze in den nächsten Tag hineinreichen soll, kann ich dann einfach diesen Grenzwert abziehen, also z.B. soll der Grenzwert 01:30 Uhr sein, ziehen wir diese 90 Minuten ab. Nun müssen wir nur noch prüfen, ob der Wert über dem unteren Grenzwert liegt, also z.B statt 10 Uhr dann 8:30 Uhr (wir müssen ja die 90 Minuten abziehen) und schon passt es mit dem Grenzwert.

Re: Mal wieder die Uhrzeit

Verfasst: 5. Mai 2021 13:59
von Boris099
Soo einfach ist das...
Also das erste Beispiel funktioniert, und klar es muss "oder" sein, das "und" ist schlichtweg falsch, denn es kann ja nicht beides gleichzeitig sein.

Das zweite Beispiel teste ich noch