Seite 1 von 1

DateTime Format formatieren

Verfasst: 1. Aug 2024 21:04
von TomW80
Hallo,

ich habe ein DateTime-Item das den Wert "2024-08-01T14:00:00.000+0200" enthält.
Diesen möchte ich gerne so formatieren: "01.08.2024 - 14:00"

Dazu habe ich den folgenden Befehl versucht:

Code: Alles auswählen

val TestDatum = String.format("%1$td.%1$tm.%1$tY, %1$tH:%1$tM", DWD_Unwetter_Warnungen_Valid_From_1.state)
Doch leider erhalte ich hier einen Fehler:
Script execution of rule with UID 'newruletest-4' failed: d != org.openhab.core.library.types.DateTimeType in newruletest
Was mache ich falsch?
Denn folgendes funktioniert:

Code: Alles auswählen

val TestDatum = String.format("%1$td.%1$tm.%1$tY, %1$tH:%1$tM", ZonedDateTime.now())
Gruß Tom

Re: DateTime Format formatieren

Verfasst: 2. Aug 2024 04:41
von udo1toni
Ja, das sind zwei unterschiedliche Datentypen.

Du musst aus dem DateTime Itemstate zunächst ein Java Time Objekt erzeugen:

Code: Alles auswählen

val jvtmValidFrom = (DWD_Unwetter_Warnungen_Valid_From_1.state as DateTimeType).getZonedDateTime()
val TestDatum = String.format("%1$td.%1$tm.%1$tY, %1$tH:%1$tM", jvtmValidFrom)
Streng genommen müsste man zunächst prüfen, ob das Item überhaupt ein gültiges Datum enthält. Gerade bei DWD Unwetter ist das evtl. gar nicht der Fall. Also besser vorher noch ein

Code: Alles auswählen

if(DWD_Unwetter_Warnungen_Valid_From_1.state instanceof DateTimeType)
und entsprechend reagieren (also z.B. die Konvertierung komplett überspringen, falls der Datentyp nicht passt).

Eine sehr gute Erläuterung aller DateTime Datentypen und der (notwendigen) Konvertierung zwischen diesen Datentypen findest Du hier: https://community.openhab.org/t/datetim ... 3-x/107197 (das ist AB openHAB3, nicht exklusiv openHAB3. Das gleiche gibt es auch für openHAB2 - hier nur der Vollständigkeit halber erwähnt, Link spare ich mir mal...)

Re: DateTime Format formatieren

Verfasst: 5. Aug 2024 21:35
von TomW80
Danke udo1toni, funktioniert. :-)
Aus der verlinkten Doku wäre ich nicht auf die Lösung gekommen. Wenn ich mir dort das Bild anschaue, müsste dann nicht auch Option #12 direkt gehen?

Code: Alles auswählen

val String TestDatum = DWD_Unwetter_Warnungen_Valid_From_1.state.format("%1$td.%1$tm.%1$ty %1$tH:%1$tM")
Habs getestet, funktioniert auch.