Wie Zeitdifferenzen >= 24 Stunden anzeigen?

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
SpiRu
Beiträge: 74
Registriert: 18.09.2012, 23:05
Wohnort: Deutschland.Freiburg

Wie Zeitdifferenzen >= 24 Stunden anzeigen?

Beitrag von SpiRu » 03.10.2012, 03:00

Hallo,

kann mir vielleicht mal einer auf die Sprünge helfen? Das Problem dürfte wohl häufig auftreten und daher von allgemeinem Interesse sein!

Wie kann ich Zeitdifferenzen >= 24 Stunden von der Interndarstellung als Variablen vom Typ [Zeit] bzw. [Uhr] in brauchbarer Form ausgeben?

Code: Alles auswählen

Mit s: [Zeichen], u: [Uhr], z: [Zeit] wird mir mit z:= 1 + "11:11:11"

   s:= z    ** als 1899-12-31 11:11:11 angezeigt
   s:= u    ** als            11:11:11 angezeigt
Beides ist nicht im Sinne des Erfinders! Es soll vielmehr "0000-00-01 11:11:11" oder "1 11:11:11" angezeigt werden. Oder noch besser, mit "+" oder "-" vorne dran, damit auch negative Zeitdifferenzen dargestellt werden können bzw. durch das Vorzeichen klar ist, dass es sich um eine Zeitdifferenz handelt.

Ich habe mir gerade einen Betriebsstundenzähler programmiert, der die Gesamtlaufzeit des Programms (auch über Neustarts hinweg) erfasst. Leider ist die Darstellung nach mehr als 24 Stunden Laufzeit ziemlich besch.. (eiden).
FHZ 1000 PC, Homeputer Studio V2.0 Rel. 120301
FHT80b-Raumregler, Windows XP (SP3)

Bugs? - Das sind keine Bugs! Das sind Features!

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Wie Zeitdifferenzen >= 24 Stunden anzeigen?

Beitrag von DrTob » 03.10.2012, 11:20

SpiRu hat geschrieben: Beides ist nicht im Sinne des Erfinders!
Doch, das ist im Sinne des Erfinders, denn genau das ist die Funktionsweise und das Verhalten von Date/Time-Variablen in fast allen Programiersprachen.

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Wie Zeitdifferenzen >= 24 Stunden anzeigen?

Beitrag von buempi » 03.10.2012, 13:22

Hallo SpiRu

Zeitvariablen speichern Zeitpunkte, nicht Zeiträume; wobei - um genau zu sein - natürlich auch jeder Zeitpunkt gleichzeitig den Zeitraum seit Beginn unserer Zeitrechnung darstellt...

Zeiträume kann man in einer Zahlenvariable speichern; nämlich in Anzahl Tagen und Bruchteilen davon. Eine Funktion, welche diesen Wert in eine ansprechende Darstellung umwandelt, gibt es in Homeputer allerdings nicht; die muss man selber bauen.

Code: Alles auswählen

ZeitVarA        := "03.10.12 13:30:00"
ZeitVarB        := "02.10.12 14:00:00"

** ZahlenVar1 hat einen Startwert von 0,0000000000
ZahlenVar       := ZeitVarA - ZeitVarB

** Anzeige ist ein Zeichenobjekt (nur zu Demozwecken,
** kann nachher überall gelöscht werden)
Anzeige         := ZahlenVar
warte("00:00:03")

** AnzVolleTage hat einen Startwert von 0 (= "gerundeter" Integer)
AnzVolleTage    := ZahlenVar

** AnzTeilTage hat einen Startwert von 0,0000000000
AnzTeilTage     := ZahlenVar - AnzVolleTage

** der berechnete Zeitraum ist grösser als x,5 Tage, weshalb die vollen Tage aufgerundet wurden
wenn AnzTeilTage < 0,0 dann
   AnzVolleTage := AnzVolleTage - 1
   AnzTeilTage  := ZahlenVar - AnzVolleTage
endewenn

** Zweite Anzeige müsste innhaltlich identisch mit der ersten sein
Anzeige         := AnzVolleTage + " " + AnzTeilTage
warte("00:00:03")

** die AnzTeilTage ins gewohnte Uhrformat hh:mm:ss umwandeln
UhrVar          := AnzTeilTage
Anzeige         := AnzVolleTage + " Tg. " + UhrVar
Viele Grüsse
Bümpi

PS: Du hast deine Frage in "HomeMatic allgemein" gepostet; da hast du dich sicher vertan. Ich verschiebe das Thema nach "Homeputer für die FHZ".

SpiRu
Beiträge: 74
Registriert: 18.09.2012, 23:05
Wohnort: Deutschland.Freiburg

Re: Wie Zeitdifferenzen >= 24 Stunden anzeigen?

Beitrag von SpiRu » 03.10.2012, 13:33

buempi hat geschrieben:PS: Du hast deine Frage in "HomeMatic allgemein" gepostet; da hast du dich sicher vertan. Ich verschiebe das Thema nach "Homeputer für die FHZ".
Da hatte ich wohl wieder mal Tomaten auf den Augen! Hatte diese Rubrik nicht gesehen. Danke für's Verschieben!
FHZ 1000 PC, Homeputer Studio V2.0 Rel. 120301
FHT80b-Raumregler, Windows XP (SP3)

Bugs? - Das sind keine Bugs! Das sind Features!

SpiRu
Beiträge: 74
Registriert: 18.09.2012, 23:05
Wohnort: Deutschland.Freiburg

Re: Wie Zeitdifferenzen >= 24 Stunden anzeigen?

Beitrag von SpiRu » 03.10.2012, 14:08

Eine relativ elegante Lösung habe ich mittlerweile auch selbst hinbekommen:

Code: Alles auswählen

**************************************************************************
** allgem. Lösung für formatierte Ausgabe einer Zeitdifferenz dt(auch < 0)
**************************************************************************
Variablen:
     dt: [Zeit], Ergebnis [Zeichen]
     r : [Zahl](real), i: [Zahl](integer), VZ: [Zeichen]
     u : [Uhr]

r:=  dt
wenn r < 0 dann
**   r :=  -r    <--- Bug: geht net!
     r := 0-r
     VZ:= "-"
sonst
     VZ:= "+"
endewenn
u:=  r
i:=  r - 0,5
Ergebnis:= VZ + i + " Tage " + u
FHZ 1000 PC, Homeputer Studio V2.0 Rel. 120301
FHT80b-Raumregler, Windows XP (SP3)

Bugs? - Das sind keine Bugs! Das sind Features!

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“