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
Rechnen und Vergleichen mit DateTime
-
- Beiträge: 317
- Registriert: 29. Okt 2020 19:53
-
- Beiträge: 199
- Registriert: 22. Sep 2018 10:38
Re: Rechnen und Vergleichen mit DateTime
Antwort auf Deine Frage: doch!
Wenn Dein String im diesem Format ist:
Wenn der String nicht in o. g. Format ist, musst du ihn erst anpassen (zerschnipseln mit substring(x,y)...)
Wenn Dein String im diesem Format ist:
kannst du folgendes machen (als .rules):2023-09-14T05:34:18+0100
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
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
-
- Beiträge: 317
- Registriert: 29. Okt 2020 19:53
Re: Rechnen und Vergleichen mit DateTime
Schonmal Danke, werde ich probieren.
Mein String sieht fast so aus, nämlich so:
Mein String sieht fast so aus, nämlich so:
Code: Alles auswählen
2023-12-17 16:53:55
Servus
-
- Beiträge: 199
- Registriert: 22. Sep 2018 10:38
Re: Rechnen und Vergleichen mit DateTime
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
-
- Beiträge: 317
- Registriert: 29. Okt 2020 19:53
Re: Rechnen und Vergleichen mit DateTime
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
@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
-
- Beiträge: 199
- Registriert: 22. Sep 2018 10:38
Re: Rechnen und Vergleichen mit DateTime
Prima, gerne!
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX