Det kan muligvis laves smartere men det her virker:
function timeadd(t1, t2 : string) : string;
var h1,m1,s1 : integer; h2,m2,s2 : integer; h3,m3,s3 : integer;
begin h1 := StrToInt(Copy(t1, 1, 2)); m1 := StrToInt(Copy(t1, 4, 2)); s1 := StrToInt(Copy(t1, 7, 2)); h2 := StrToInt(Copy(t2, 1, 2)); m2 := StrToInt(Copy(t2, 4, 2)); s2 := StrToInt(Copy(t2, 7, 2)); s3 := s1 + s2; m3 := m1 + m2; h3 := h1 + h2; if s3 >= 60 then begin s3 := s3 - 60; m3 := m3 + 1; end; if m3 >= 60 then begin m3 := m3 - 60; h3 := h3 + 1; end; result := ''; if h3 < 10 then result := result + '0' + IntToStr(h3) else result := result + IntToStr(h3); result := result + ':'; if m3 < 10 then result := result + '0' + IntToStr(m3) else result := result + IntToStr(m3); result := result + ':'; if s3 < 10 then result := result + '0' + IntToStr(s3) else result := result + IntToStr(s3); end;
Den kræver at du bruger en Delphi version der har uniten DateUtils som skal tilføjes uses, jeg bruger Delphi 7 men jeg ved ikke hvor langt tilbage den findes:
function TimeAdd(Tstr : array of string) : string; var i,Sec : integer;
function DecSec(count : integer) : string; begin i:=(Sec div count); Result:=Format('%.2d',[i]); Dec(Sec,(i*Count)); end;
begin Sec:=0; for i:=0 to Length(Tstr)-1 do Sec:=Sec+SecondsBetween(0,StrToTime(Tstr[i])); Result:=DecSec(3600)+':'+DecSec(60)+':'+DecSec(1); end;
Du kan ligge ligeså mange tider sammen som du ønsker, f.eks.:
/04:32:10 og //23:32:15 og //16:18:55 bliver til //44:23:20
Lige en bem., hvis du han en ældre version af Delphi f.eks. version 4 så har du ikke DateUtils uniten og derfor ikke funktionen SecondsBetween, men den kan jeg så hurtig lave så.
ok, jeg troede at de tider der skulle ligges sammen alle var gyldige tidspunkter dvs. fra 00:00:00 til max. 23:59:59 og derfor kunne jeg bruge funktionen StrToTime, men hvis tiderne der skal ligges sammen kan være over 23:59:59 så skal der en anden beregning til. Det vil jeg lige kikke på senere i aften.
Sådan, den virker dog ikke hvis du har tider der har et andet format end hh:mm:ss, dvs. at tiden 126:46:23 vil ikke virke, hvis du har sådan tider så sig til så laver jeg en ny løsning.
function TimeAdd(Tstr : array of string) : string; var i,Sec : integer;
function DecSec(count : integer) : string; begin i:=(Sec div count); Result:=Format('%.2d',[i]); Dec(Sec,(i*Count)); end;
function CovertToSec(TimeStr : string) : integer; var i,SecAdd : integer; begin i:=7;Result:=0;SecAdd:=1; while i>0 do begin Result:=Result+(StrToInt(Copy(TimeStr,i,2))*SecAdd); Dec(i,3); SecAdd:=SecAdd*60; end; end;
begin Sec:=0; for i:=0 to Length(Tstr)-1 do Sec:=Sec+CovertToSec(Tstr[i]); Result:=DecSec(3600)+':'+DecSec(60)+':'+DecSec(1); end;
For lige at få det slået helt fast så har _alle_ dine timere formatet hh:mm:ss hvor hh kan være et hvilket som helst tal, mm er fra 00 til 59, og ss er fra 00 til 59. Er det korrekt?
function TimeAdd(Tstr : array of string) : string; var i,Sec : integer;
function DecSec(count : integer) : string; begin i:=(Sec div count); Result:=Format('%.2d',[i]); Dec(Sec,(i*Count)); end;
function CovertToSec(TimeStr : string) : integer; begin Result:=StrToInt(Copy(TimeStr,1,pos(':',TimeStr)-1))*3600; Result:=Result+StrToInt(Copy(TimeStr,pos(':',TimeStr)+1,2))*60; Result:=Result+StrToInt(Copy(TimeStr,pos(':',TimeStr)+4,2)); end;
begin Sec:=0; for i:=0 to Length(Tstr)-1 do Sec:=Sec+CovertToSec(Tstr[i]); Result:=DecSec(3600)+':'+DecSec(60)+':'+DecSec(1); end;
----------------------
Jeg har testet med: //04:32:10 og //23:32:15 og //16:18:55 og //163:45:36 som giver resultatet // 218:08:56 hvilket skulle være rigtig efter min hovedregning
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.