NEWS
Timestamp - Welches Format für DP?
-
Hallo,
ich versuche gerade einen Timestamp in einen Datenpunkt zu schreiben.
Der DP wird erzeugt mit:
createState(folderName + '.' + room + ".Lastchange","",{name: "Lastchange", type: 'string', role: 'date'}, function () {});
Geschrieben wird mit:
setState(folderName + "." + room + ".Lastchange", new Date(), true);
Technisch funktioniert das ganze auch, nur bekomme ich eine javascript Warnung in der setState Zeile.
Weitere Infos was da stört bekomme ich nicht (Auch nicht mit ausführlichen Protokollausgaben) - Ich würde mal vermuten das er sich am Format von nen Date() stört...Edith: Was mir gerade aufgefallen ist: new Date() liefert mir lokale Zeit (aktuell 17:06), in den DP wird aber 16:06 geschrieben. Hat vermutlich nichts mit dem Punkt oben zu tun - Ist trotzdem merkwürdig.
-
@warhammer73 sagte: Warnung in der setState Zeile.
new Date()
erzeugt ein Objekt - keinen String. -
@paul53 sagte in Timestamp - Welches Format für DP?:
@warhammer73 sagte: Warnung in der setState Zeile.
new Date()
erzeugt ein Objekt - keinen String. Ich weiß nicht, ob man ein Date-Objekt in einen Datenpunkt schreiben kann.Na dann schreibt man ggf. mit new Date().getTime() . geht das nicht?
-
@mickym sagte: new Date().getTime() . geht das nicht?
Ja, das ist dann aber eine große Zahl (ms).
-
@paul53 Aber die Timestamps sind doch in ms abgespeichert?
-
@mickym sagte: Timestamps sind doch in ms abgespeichert?
Ja, die Timestamps der Datenpunkte.
-
@warhammer73 sagte: in den DP wird aber 16:06 geschrieben.
In den Datenpunkt wird die UTC-Zeit geschrieben. Erzeuge einen String mit der lokalen Zeit mittels
new Date().toLocaleString()
Ergebnis: "5.2.2023, 17:28:50"
-
@paul53 Danke!
... gibts auch noch einen Weg das mir die Protokollausgabe gleich verrät was ihr nicht gefällt?
-
@warhammer73 sagte: Protokollausgabe gleich verrät was ihr nicht gefällt?
Im Tab "Protokolle" steht, wenn der Datenpunkttyp nicht zum Typ des geschriebenen Wertes passt.
-
@warhammer73 Laut Doku sollte
role: date
entwederdate (common.type = string - parsable by "new Date(ddd)" string
oder
date (common.type = number - epoch seconds * 1000
sein. Also z.B. geht auch
createState(`${folderName}.${room}.Lastchange`, Date.now(), { name: 'Last change', type: 'number', role: 'date' });
Gespeichert wird dann ein Timestamp, aber dank der Rolle zeigt z.B. der Admin-Adapter das in einem lesbaren Format an. Das ist meine bevorzugte Variante, weil man damit am besten weiter arbeiten kann (falls nötig).
-
@paul53 sagte in Timestamp - Welches Format für DP?:
In den Datenpunkt wird die UTC-Zeit geschrieben. Erzeuge einen String mit der lokalen Zeit mittels
new Date().toLocaleString()Dann aber bitte nicht
role: date
setze, weil dann versucht z.B. der Admin das zu parsen / gibt den Inhalt annew Date()
. Und bei einem Deutschen Datumsformat geht das oft schief. Sonst lieber als UTC-String oder halt als Timestamp (s.o.).