Seite 1 von 1

Rechnen und Vergleichen mit DateTime

Verfasst: 17. Dez 2023 10:26
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

Re: Rechnen und Vergleichen mit DateTime

Verfasst: 17. Dez 2023 15:38
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)...)

Re: Rechnen und Vergleichen mit DateTime

Verfasst: 17. Dez 2023 16:56
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

Re: Rechnen und Vergleichen mit DateTime

Verfasst: 18. Dez 2023 08:28
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 

Re: Rechnen und Vergleichen mit DateTime

Verfasst: 18. Dez 2023 18:02
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

Re: Rechnen und Vergleichen mit DateTime

Verfasst: 18. Dez 2023 18:32
von nw378
Prima, gerne! :)