Skript übernimmt Systemzeit mit einer Stunde Verschiebung

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Uwe-S
Beiträge: 31
Registriert: 02.04.2020, 22:55
System: CCU
Wohnort: Leipzig

Re: Skript übernimmt Systemzeit mit einer Stunde Verschiebung

Beitrag von Uwe-S » 04.05.2020, 18:34

Das ist richtig. Aber es geht ja nur um die richtige Darstellung des Wochentages. Da ist es Wurscht, ob der Samstag um 0:00 oder um 1:00Uhr losgeht. Aber ich werde wirklich auf localtime umstellen. Ich danke euch allen.

Horst2
Beiträge: 11
Registriert: 30.11.2018, 16:02
Danksagung erhalten: 1 Mal

Re: Skript übernimmt Systemzeit mit einer Stunde Verschiebung

Beitrag von Horst2 » 18.01.2022, 20:43

Wenn ich mir mit der Methode .ToTime() ein time-Objekt erzeuge (aus einem Intergerwert mit den Sekunden seit Mitternacht oder einem String mit z.B. "12:06"), dann wird die Eigenschaft IsLocalTime implizit auf TRUE gesetzt. Gibt es einen Weg, so ein Object aus einer Uhrzeit mit IsLocalTime=false zu erzeugen oder die Eigenschaft nachträglich zu ändern?
Z.B. könnte ich mir folgende erweiterte Syntax vorstellen:

Code: Alles auswählen

var zeit = "12:06";
time t = zeit.ToTime(false);
oder

Code: Alles auswählen

t.IsLocalTime(false);
Soweit ich es jetzt verstanden habe:
integer.ToTime() setzt stupide den Integer-Wert als Zeitwert in Sekunden seit dem 1.1.1970 als UTC-Wert. Und aktiviert das IsLocalTime-Flag, so dass bei Ausgaben der Zeitzonenoffset hinzuaddiert wird. Bei string.ToTime() wird, wenn der String nur eine Uhrzeit enthält, das aktuelle Datum addiert, die Zeitzone "abgezogen" und auch das IsLocalTime-Flag gesetzt.
Etwas Beispielcode:

Code: Alles auswählen

var t0=currenttime;
t0=t0-t0.ToInteger(); ! "Leeres" Time-Object mit IsLocalTime=false, der einzige Weg, der mir dafür eingefallen ist.
WriteLine("string.ToTime():");
t0=t0+"12:06".ToTime();
WriteLine("  " # t0 # ", t0.IsLocalTime:" # t0.IsLocalTime() # ", " # t0.Format("%H:%M") # ", " # t0.ToInteger() # ", " # t0.Hour() # " Uhr");
var t1="12:06".ToTime();
WriteLine("  " # t1 # ", t1.IsLocalTime:" # t1.IsLocalTime() # ", " # t1.Format("%H:%M") # ", " # t1.ToInteger() # ", " # t1.Hour() # " Uhr");
var t2=currenttime;
t2=t2-t2.ToInteger();
var seconds = ((12*60)+ 6)*60;
WriteLine("integer: " # seconds);
t2=t2+seconds;
WriteLine("  " # t2 # ", t2.IsLocalTime:" # t2.IsLocalTime() # ", " # t2.Format("%H:%M") # ", " # t2.ToInteger() # ", " # t2.Hour() # " Uhr");
var t3=seconds.ToTime();
WriteLine("  " # t3 # ", t3.IsLocalTime:" # t3.IsLocalTime() # ", " # t3.Format("%H:%M") # ", " # t3.ToInteger() # ", " # t3.Hour() # " Uhr");
Dies ergibt:
string.ToTime():
2022-01-18 12:06:00, t0.IsLocalTime:0, 12:06, 1642503960, 11 Uhr
2022-01-18 12:06:00, t1.IsLocalTime:1, 12:06, 1642503960, 12 Uhr
integer: 43560
1970-01-01 13:06:00, t2.IsLocalTime:0, 13:06, 43560, 12 Uhr
1970-01-01 13:06:00, t3.IsLocalTime:1, 13:06, 43560, 13 Uhr
Zuletzt geändert von Horst2 am 18.01.2022, 22:11, insgesamt 1-mal geändert.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Skript übernimmt Systemzeit mit einer Stunde Verschiebung

Beitrag von alchy » 18.01.2022, 21:34

bitte beachten

Code: Alles auswählen

var zeit = "12:06"; !zeit ist ein string
time t = zeit.ToTime(); ! time mit dem Wert   2022-01-18 12:06:00

Code: Alles auswählen

var zeit = 1206; ! zeit ist integer
time t = zeit.ToTime(); ! time mit Wert 1970-01-01 01:20:06

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“