Stunde und Minute + Stunde und Minute

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Benutzeravatar
anli
Beiträge: 4326
Registriert: 10.06.2009, 14:01
Wohnort: 20 Min. nördlich von Hannover und bei Bremen
Hat sich bedankt: 1 Mal
Danksagung erhalten: 23 Mal
Kontaktdaten:

Re: Stunde und Minute + Stunde und Minute

Beitrag von anli » 09.02.2013, 23:34

paul53 hat geschrieben:
anli hat geschrieben:Quick and dirty (da war noch ein anderer Fehler drin: + wird nicht für string concatenation verwendet sondern #)
Beide Varianten sind möglich und auch dokumentiert.
Habe ich noch nicht gesehen. Aber wie erklärt sich dann das: http://homematic-forum.de/forum/viewtop ... 27&t=12056?
Herzliche Grüße, anli

Alle Angaben ohne Gewähr und Haftung meinerseits. Verwendung der von mir zur Verfügung gestellten Downloads auf eigene Gefahr. Ich bitte um Verständnis, dass ich aus zeitlichen Gründen keine unaufgeforderte Hilfestellung per PN/Mail geben kann. Bitte allgemeine Fragen ins Forum stellen, hier können viele fähige User viel schneller helfen.

Homematic-Manager v2: einfaches Tool zum Erstellen von Direktverknüpfungen und Bearbeiten von Gerätenamen, -parametern etc. für Homematic und HomematicIP (Alternative diesbzgl. zur WebUI)

Einsteiger-Hilfeerweiterter Skript-Parser

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 177 Mal
Kontaktdaten:

Re: Stunde und Minute + Stunde und Minute

Beitrag von hobbyquaker » 10.02.2013, 09:14

paul53 hat geschrieben:Beide Varianten sind möglich und auch dokumentiert.
Ja, aber das + für String-Concatenation zu verwenden birgt gewisse Fallstricke beim Casting von Variablen:

Code: Alles auswählen

real a = 1.0;
string c = "x";

WriteLine(a + c); ! 1.000000
WriteLine(c + a); ! x1.000000

WriteLine(a # c); ! 1.000000x
WriteLine(c # a); ! x1.000000
Der Ergebnis-Typ des + Operators entpricht seinem ersten Operand, der des # Operators ist immer String. Merzt also u.U. eine mögliche Fehlerquelle aus.

Grüße, Hobbyquaker

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Stunde und Minute + Stunde und Minute

Beitrag von paul53 » 10.02.2013, 14:50

Wer Real- und String-Werte ohne Typwandlung

Code: Alles auswählen

a = a.ToString();
verketten will (quick and dirty), ist selbst schuld.
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 177 Mal
Kontaktdaten:

Re: Stunde und Minute + Stunde und Minute

Beitrag von hobbyquaker » 10.02.2013, 15:39

paul53 hat geschrieben:Wer Real- und String-Werte ohne Typwandlung verketten will ist selbst schuld.
Stimme Dir ja zu, aber wenn Du mal Dein Blick über die üblichen Homematic-Scripte (sowohl die von eQ3 selbst als auch die die Community so verbreitet) schweifen lässt siehst Du dass das "gängige Praxis" ist ;-)

RoBra81
Beiträge: 31
Registriert: 12.06.2012, 11:37

Re: Stunde und Minute + Stunde und Minute

Beitrag von RoBra81 » 02.04.2013, 11:29

Da ich auch gerade dabei bin, mit Zeiten zu rechnen bin ich auf diesen Beitrag gestoßen und möchte mal meine Alternative vorstellen:
Ich nutze einfach den Datentyp time. Da ich aber (erstmal) nur Stunden und Minuten brauche, baue ich mir einen gültigen Zeitstring aus dem aktuellen Datum und meiner Wunschzeit zusammen und wandle ihn ins time-Format (ToTime()) um, mit dem ich dann beliebig rechnen (addieren und subtrahieren von Sekunden) und vergleichen kann:

Code: Alles auswählen

var zeitstring;   ! nur zur Veranschaulichung - ich schreibe alles in eine Zeile

! (Systemvariable 'weckzeit' soll lediglich String mit Uhrzeit enthalten)
weckzeit.Variable("11:00:00");    ! Weckzeit ist 11:00 Uhr 

zeitstring = system.Date("%Y-%m-%d") # " " #  weckzeit.Variable(); ! 2013-04-02 11:00:00

! Addieren von 10 Minuten (10 * 60 Sekunden) zur Weckzeit:
weckzeit.Variable((zeitstring.ToTime() + (10 * 60)).Format("%H:%M:%S"));

WriteLine(weckzeit.Variable());  ! Weckzeit ist nun 11:10 Uhr
Das soll nur als Denkanstoß dienen, um nicht die Zeitstrings zerlegen zu müssen...

edit:

Um beim Beispiel zu bleiben:

Code: Alles auswählen

string s1 = ("00:00");    ! Uhrzeit in hh:mm
string s2 = ("00:05");    ! Zeitdauer in hh:mm
WriteLine(((("2000-01-01 " # s1 # ":00").ToTime() + (("1970-01-01 " # s2 # ":00").ToTime() + 3600))).Format("%H:%M:%S"));
Die

Code: Alles auswählen

 + 3600
sind notwendig, da das time-Format am 01.01.1970 um 01:00:00 beginnt...

Ronny

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“