![]() |
Problem mit Zeiten-Addition
Servus.
Also ich habe mich jetzt schon seit mehreren Tagen mit der Addition von Zeiten beschäftigt, und stoße aber immer wieder an meine Grenzen. Ausgangssituation: Ich will die komplette Messzeit einer Anlage erfassen. Ich muss es Ablaufbedingt so lösen, dass ich einen String aus einer Datenbank mit der aktuellen Laufzeit bekomme (z.B. 65:55:12 -> 65 Stunden 55 Minuten 12 Sekunden) und dann immer Zeiten dazu addiere. Dafür habe ich folgende Funktion geschrieben:
Delphi-Quellcode:
Das Problem ist nun, dass TTime nur maximal 24 Stunden unterstützt und dann gibts Konvertierungsfehler. Nun könnte ich ja alles auf Stringbasis berechnen, aber das wird dann ja immer komplizierter. Wie würdet Ihr das denn lösen?
function TFrmMain.AddTimes(Time1, Time2: TTime; var TimeSum: TTime): Boolean;
var Std, Min, Sec : Integer; stdStr, MinStr: String; Uebertrag : Integer; begin Sec := SecondOf(Time1) + SecondOf(Time2); Min := MinuteOf(Time1) + MinuteOf(Time2); Std := HourOf(Time1) + HourOf(Time2); if (Sec mod 60) > 0 then begin Sec := Sec mod 60; Min := Min + 1 end; if (Min mod 60) > 0 then begin Min := Min mod 60; Std := Std + 1 end; TimeSum := EncodeTime(Std,Min,Sec,0); Result := TRUE; end; |
Re: Problem mit Zeiten-Addition
Du könntest entweder mit dem kompletten DateTime arbeiten (hast dann halt noch Tage mit drin) oder die nen eigenen Typen definieren - oder einfach alle Zeiten in Sekunden seit Messbeginn umwandeln (mit Integer kannste dann 68 Jahre in die Zukunft gehen)
|
Re: Problem mit Zeiten-Addition
Wenn in Time wirklich nur Zeiten und kein Datum enthalten ist, dann
Delphi-Quellcode:
vor dem Komma wären die Tage, statt dem Datum (Datum = Tage seit 30.12.1899)
function TFrmMain.AddTimes(Time1, Time2: TTime; var TimeSum: TTime): Boolean;
begin TimeSum := Time1 + Time2; Result := TRUE; end;
Delphi-Quellcode:
function TFrmMain.AddTimes(Time1, Time2: TTime; var TimeSum: TTime): Boolean;
var Day, Std, Min, Sec: Integer; begin Day := Trunc(Time1) + Trunc(Time2); Sec := SecondOf(Time1) + SecondOf(Time2); Min := MinuteOf(Time1) + MinuteOf(Time2); Std := HourOf(Time1) + HourOf(Time2); Min := Min + Sec div 60; Sec := Sec mod 60; Std := Std + Min div 60; Min := Min mod 60; Day := Day + Std div 24; Std := Std mod 24; TimeSum := Day + EncodeTime(Std, Min, Sec, 0); Result := TRUE; end; |
Re: Problem mit Zeiten-Addition
Was bringt eigentlich ein Rückgabewert, der immer wahr ist?
|
Re: Problem mit Zeiten-Addition
k.A., aber vielleicht war mal sowas geplant? :angel2:
Delphi-Quellcode:
...
Result := Std < 24; if Result then TimeSum := EncodeTime(Std,Min,Sec,0); end; |
Re: Problem mit Zeiten-Addition
Den Rückgabewert habe ich erstmal nur so reingemacht, da ich noch am testen bin.
Danke erstmal für Eure Antworten. Aber bei den Lösungen habe ich immer noch das Problem, dass wenn ich den Wert wieder aus der Datenbank auslesen will und dann etwas dazu addieren will, kann ich ihn nicht mehr in TTime umwandeln. Dann müsste ich wieder die Tage und die restliche Zeit trennen. Die Idee alles in Sekunden umzustellen finde ich bis jetzt am Besten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz