Ankündigung

Einklappen
Keine Ankündigung bisher.

caldav-Binding: DateTime Formatierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    caldav-Binding: DateTime Formatierung

    Hi,

    ich habe eine Formatierungsfrage. Ich möchte
    Code:
    DateTime OfficeCalTime01    "[%1$tH:%1$tM Uhr]"   <calendar>    { caldavPersonal="calendar:dienstlich type:ACTIVE eventNr:1 value:START" }
    Das Item kann die Werte "Undefined", "Uninitialized" oder ein DateTime "2015-03-11T08:00:00" enthalten.

    Ich möchte mir die Uhrzeit (in der Form 06:25) davon ausgeben lassen. Mit diesem Rule-Schnipsel
    Code:
    var SimpleDateFormat time = new SimpleDateFormat( "HH:mm" )
    var String OfficeTime11 = time.format( OfficeCalTime01 )
    wirft openhab diese Fehlermeldung:
    Code:
    2015-03-10 20:25:01.475 [ERROR] [.o.m.r.i.engine.ExecuteRuleJob] - Error during the execution of rule Test
    java.lang.IllegalArgumentException: Cannot format given Object as a Date
            at java.text.DateFormat.format(DateFormat.java:301) ~[na:1.7.0_75]
            at java.text.Format.format(Format.java:157) ~[na:1.7.0_75]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na]
            at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
            at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateMemberFeatureCall(XbaseInterpreter.java:549) ~[na:na]
            at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateVariableDeclaration(XbaseInterpreter.java:601) ~[na:na]
            at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
            at sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateIfExpression(XbaseInterpreter.java:329) ~[na:na]
            at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
            at sun.reflect.GeneratedMethodAccessor65.invoke(Unknown Source) ~[na:na]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
            at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
            at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
            at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
            at org.openhab.model.script.internal.engine.ScriptImpl.execute(ScriptImpl.java:59) ~[na:na]
            at org.openhab.model.rule.internal.engine.ExecuteRuleJob.execute(ExecuteRuleJob.java:55) ~[na:na]
            at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-all-2.1.7.jar:na]
            at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-all-2.1.7.jar:na]
    Was mache ich falsch?

    #2
    Also vorweg: wie es richtig geht, weiß ich leider nicht (Typumwandlungen hab ich noch nicht verstanden - ich hab keinen blassen Schimmer von Java), aber das Problem rührt vermutlich daher, dass OfficeCalTime01 vom Typ State ist, nicht vom Typ DateTime.

    Kommentar


      #3
      Tja, da geht's Dir wie mir :-), hab auch keinen Schimmer von Java und kopier mich halt so durch ...
      Aber wenn das item als DateTime definiert ist, hätte ich zumindest erwartet, dass auch drinsteckt, was draufsteht.
      Ich hoffe mal auf einen Java-Kundigen, der vermutlich die Lösung ganz locker aus dem Ärmel schüttelt.

      Kommentar


        #4
        Moin,

        wenn ich mir DateTime ansehe (https://github.com/openhab/openhab/b...eTimeType.java), dann sehe ich eine "format"-Methode.

        Als String könnte dasselbe funktionieren wie bei der Formatierung im Item label (Spalte 3 der Item-Definition).

        Ich würde auf
        OfficeCalTime01.format("%1$tH:%1$tM") tippen. Untested ... ohne Gewähr ... Gruß, Carsten

        Kommentar


          #5
          Zitat von cal Beitrag anzeigen
          Moin,

          wenn ich mir DateTime ansehe (https://github.com/openhab/openhab/b...eTimeType.java), dann sehe ich eine "format"-Methode.

          Als String könnte dasselbe funktionieren wie bei der Formatierung im Item label (Spalte 3 der Item-Definition).

          Ich würde auf
          OfficeCalTime01.format("%1$tH:%1$tM") tippen. Untested ... ohne Gewähr ... Gruß, Carsten
          Bin eben mal dazu gekommen, Deinen Vorschlag zu testen. Leider kommen Fehler:
          Code:
          java.lang.RuntimeException: The name '<XFeatureCallImplCustom>.format(<XStringLiteralImpl>)' cannot be resolved to an item or type.
                  at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:67) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateMemberFeatureCall(XbaseInterpreter.java:549) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:751) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:712) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:751) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:712) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAssignment(XbaseInterpreter.java:843) ~[na:na]
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75]
                  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateIfExpression(XbaseInterpreter.java:329) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor60.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor64.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateIfExpression(XbaseInterpreter.java:329) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor60.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
                  at sun.reflect.GeneratedMethodAccessor64.invoke(Unknown Source) ~[na:na]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75]
                  at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75]
                  at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
                  at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
                  at org.openhab.model.script.internal.engine.ScriptImpl.execute(ScriptImpl.java:59) ~[na:na]
                  at org.openhab.model.rule.internal.engine.ExecuteRuleJob.execute(ExecuteRuleJob.java:55) ~[na:na]
                  at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-all-2.1.7.jar:na]
                  at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-all-2.1.7.jar:na]
          Jetzt kann ich das leider nicht interpretieren ...
          Ich habe noch org.openhab.core.transform.actions.Transformation inkludiert, in der Hoffnung, das würde was ändern ... leider nicht.

          Diese *blöden* Typumwandlungen kosten mich noch den letzten Nerv. Irgenwie kostet mich das unendlich viel Zeit, vernünftige Ausgaben zu erzeugen :-(
          Kann mir bitte wer auf die Sprünge helfen, ich bin mit meinem sehr eingeschränkten Java-Latein am Ende.

          Das sollte ja nicht so schwierig sein, oder doch?

          Ich frage mich ja auch, warum JodaTime-Methoden nicht funktionieren auf openHAB items, zumindest komme ich mit dem SimpleDateFormat auch nicht weiter.

          Viele Grüße
          Michael

          Kommentar


            #6
            Hi Michael,

            ich hatte ein ähnliches Problem vor kurzem. Daher weiß ich wie schwierig es sein kann.
            In der Rule solltest du mit folgenden Zeilen an alle notwendigen Daten ran kommen.

            Code:
            import org.openhab.core.library.types.*
            import org.joda.time.*
            import java.util.*//keine Ahnung ob man diesen import braucht ist beim Testen rein gewandert
            
            logInfo("meine rule", "ouput" + Tonne_Date.state)
            //in joda time casten
            var org.joda.time.DateTime myDateTime = new org.joda.time.DateTime((Tonne_Date.state as DateTimeType).calendar.timeInMillis)
            logInfo("meine rule", "ouput " + myDateTime.getYear())
            logInfo("meine rule", "ouput " + myDateTime.getHourOfDay())
            logInfo("meine rule", "ouput " + myDateTime.getMinuteOfHour())
            Hoffe das hilft dir weiter.

            Gruß Marc
            Zuletzt geändert von fog; 12.03.2015, 19:27.

            Kommentar


              #7
              Hallo Marc,

              vielen Dank, jetzt bin ich möglicherweise schon einen Schritt weiter. Eine Uhrzeit auf diese weise zusammengebastelt sieht dann leider 6:4 (statt 06:04) aus. Wie bekomme ich das jetzt noch vernünftig formatiert?

              Viele Grüße
              Michael

              Kommentar


                #8
                Hi

                scheinbar hab ich deine Frage etwas falsch verstanden?!
                Wenn du es für die Darstellung auf der Oberfläche brauchst, kannst du der Einfachheit halber auch [%1$tR Uhr] nutzen.
                Oder wenn du es doch innerhalb der Rule benötigst:
                Code:
                var org.joda.time.DateTime myDateTime = new org.joda.time.DateTime((Tonne_Date.state as DateTimeType).calendar.timeInMillis)
                logInfo("meine rule", "ouput " + myDateTime.toString("hh:mm") + " Uhr")
                Zuletzt geändert von fog; 12.03.2015, 21:31.

                Kommentar


                  #9
                  Hallo Marc,
                  ich möchte das nicht auf der Oberfläche ausgeben, das item format hatte ich schon entsprechend definiert.
                  Aber was ich benötige ist, diesen String (z.B. 06:04) in einer rule zu einem Text zusammenzubasteln. Z.B.
                  Code:
                  text = "Das Wetter heute blabla "
                  Uhrzeit ="06:04"
                  text = text + " nächster Termin ist um " + Uhrzeit
                  Wobei natürlich Uhrzeit aus diesem DateTime kommen soll.

                  Das item:
                  Code:
                  DateTime OfficeCalTime11 "[%1$tH:%1$tM Uhr]" <calendar> { caldavPersonal="calendar:dienstlich type:UPCOMING eventNr:1 value:START" }
                  Viele Grüße
                  Michael

                  Kommentar


                    #10
                    Hast du den letzten Edit gesehen? Hat sich evtl mit deiner Antwort überschnitten.
                    Code:
                     
                     var myTime = myDateTime.toString("hh:mm") + " Uhr" //gibt dir die Uhrzeit z.B 06:24 Uhr [FONT=Arial][SIZE=15px][/SIZE][/FONT]

                    Kommentar


                      #11
                      Muss ich heute abend gleich mal ausprobieren :-) Das sieht zumindest ganz nach meinem Geschmack aus, einfach, übersichtlich ...
                      Vielen Dank erstmal für Deine Geduld!

                      Kommentar

                      Lädt...
                      X