Rechnen und Vergleichen mit DateTime

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Rechnen und Vergleichen mit DateTime

Beitrag von Quautiputzli »

Hallo miteinander

Wie kann man eigentlich Zeiten vergleichen?
Nun konkret zu meiner Aufgabenstellung.
Ich bekomme als Rücklesewert eines Exec-Bindings eine "Datum/Zeit"-Angabe (erstmal leider nur als String). Um 20 Uhr abends will ich eine Rule laufen lassen, welche nun prüft ob dieser Zeitstempel schon älter als 390 Minuten ist. Bei weniger als diese 390 Minuten sollt ein Item gesetzt werden, ansonsten eben nicht.

Wie kann man so etwas anstellen? Ein einfacher Vergleich von Zeiten mit < oder > funktioniert ja nicht oder?

Danke und Servus
Servus

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Rechnen und Vergleichen mit DateTime

Beitrag von nw378 »

Antwort auf Deine Frage: doch! :-)

Wenn Dein String im diesem Format ist:
2023-09-14T05:34:18+0100
kannst du folgendes machen (als .rules):

Code: Alles auswählen

when
    Time cron "0 00 20 * * ? *" //um 20 Uhr die Rule starten
then
    val datum = new DateTimeType (StringItem.state.toString).zonedDateTime  //StringItem ist dein Exec-Rücklesewert
    val delta = Duration.between(now, datum).toMinutes()
    if (delta < 390)
     meinItem.postUpdate(...)
end    
Wenn der String nicht in o. g. Format ist, musst du ihn erst anpassen (zerschnipseln mit substring(x,y)...)
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rechnen und Vergleichen mit DateTime

Beitrag von Quautiputzli »

Schonmal Danke, werde ich probieren.

Mein String sieht fast so aus, nämlich so:

Code: Alles auswählen

2023-12-17 16:53:55
Servus

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Rechnen und Vergleichen mit DateTime

Beitrag von nw378 »

Dann musst du vorab noch ein wenig basteln. Ungeprüft:

Code: Alles auswählen

when
    Time cron "0 00 20 * * ? *" //um 20 Uhr die Rule starten
then
    var datum = StringItem.state.toString.split(" ").get(0)
    val zeit = StringItem.state.toString.split(" ").get(1)
    val offset = OffsetDateTime.now().toString()
    datum += "T" + zeit + offset
    
    val datumZeit = new DateTimeType (datum).zonedDateTime 
    val delta = Duration.between(now, datumZeit).toMinutes()
    if (delta < 390)
     meinItem.postUpdate(...)
end 
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Rechnen und Vergleichen mit DateTime

Beitrag von Quautiputzli »

Hallo

@nw378 ich hab nun das Format bei meinem Rücklesewert so abgeändert, dass es gleich passt. Das musste sowieso durch ein Javascript angepasst werden. So konnte ich dann gleich deinen ersten Vorschlag umsetzen. Ich musste nur "now" und "datum" vertauschen da sonst der Wert negativ war - Läuft.

Danke
Servus

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Rechnen und Vergleichen mit DateTime

Beitrag von nw378 »

Prima, gerne! :)
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Antworten