Hallo, habe mir deine
Unit angeschaut und meine langjährige Erfahrung sagt mir, dass du
völlig auf dem Holzweg bist.
Grundsätzlich gilt:
Alle Datums- und Zeitwerte werden zuerst in das interne Format
TDateTime umgewandelt.
Erst dann werden damit Berechnungen durchgeführt.
Mit Strings werden direkt keine Zeitberechnungen durchgeführt.
Wenn deine Zeitangaben > als 24 Stunden sind, dann muss man eben Tage hinzunehmen.
Du brauchst also nur 2 Funktionen:
1.) einen String (z.B. 50:30:00) nach TDateTime wandeln
2.) einen TDateTime-Wert in einen String wandeln (z.B. 4d 23:50:00 = 4Tage, 23 Std,50 Min)
die Funktion zu 1.) könnte so aussehen:
Delphi-Quellcode:
function StrToTimeSpan(timestring: string):TDateTime;
// diese Function parst einen String der Art '25:15:36'
// ohne 24 Stunden Grenze der Delphi-eigenen Routinen.
var
sstd, smin, ssek: string;
begin
sstd := StrToken(timestr, ':');
smin := StrToken(timestr, ':');
ssek := StrToken(timestr, ':');
hour:= strtointDef(sstd, 0);
minute:= strtointDef(smin, 0);
sekunde:= strtointDef(ssek, 0);
result := (((sekunde / 60.0) + minute) / 60.0 + hour) / 24.0;
end;
Delphi-Quellcode:
// kopiert aus der JCL
function StrToken(var S: string; Separator: Char): string;
var
I: Integer;
begin
I := Pos(Separator, S);
if I <> 0 then
begin
Result := Copy(S, 1, I - 1);
Delete(S, 1, I);
end
else
begin
Result := S;
S := '';
end;
end;
zu 2.) das bekommst du selbst hin.
Hinweis: du musst vorher nur die ganzen Tage abtrennen (function frac() und int()), dann kannst du TimeToStr verwenden.