Skript übernimmt Systemzeit mit einer Stunde Verschiebung
Moderator: Co-Administratoren
Re: Skript übernimmt Systemzeit mit einer Stunde Verschiebung
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.
Re: Skript übernimmt Systemzeit mit einer Stunde Verschiebung
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:
oder
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:
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
Z.B. könnte ich mir folgende erweiterte Syntax vorstellen:
Code: Alles auswählen
var zeit = "12:06";
time t = zeit.ToTime(false);
Code: Alles auswählen
t.IsLocalTime(false);
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");
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.
-
- 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
bitte beachten
Alchy
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.