Fórum Como somar valores do tipo TTime?? #368262
09/02/2009
0
Aqui neste link tem a imagem de como o meu programa deve ficar:
http://i415.photobucket.com/albums/pp240/junniorsouzza/imagem.jpg
Eu declarei uma variavel Chamada TotalHoras : TTime; Eu quero ir digitando uma quantidade de tempo nos campos da coluna Horas deste DBGrid (olhem a figura) e ir automaticamente somando esses valores na variável TotalHoras e imprimir a soma num Edit do formulário. Só que eu não sei como fazer para somar valores do tipo time. Não estou usando banco de dados, então por favor não respondam nada que esteja relacionado com banco de dados. ^^
Vlw!!
Junnsouzza
Curtir tópico
+ 0Posts
10/02/2009
Sebastiaoarm
function SomaTTime(Horas: array of TTime): TTime; var i: Integer; begin for i := 0 to (Length(Horas) - 1) do Result := Result + Horas[i]; end;
Um exemplo de uso:
begin ShowMessage(TimeToStr(SomaTTime([StrToTime(´00:15:00´), StrToTime(´01:30:00´)]))); end;
Gostei + 0
10/02/2009
Junnsouzza
Por exemplo. Se a soma de horas trabalhadas por um funcionário na semana der 40 horas e 30 minutos. O resultado da soma vai dar 40:30???
Gostei + 0
10/02/2009
Sebastiaoarm
Creio que essa função faça o que você procura:
function SomaTTime(Tempos: array of TTime): String; var i, Horas, Minutos, Segundos: Integer; begin Horas := 0; Minutos := 0; Segundos := 0; for i := 0 to (Length(Tempos) - 1) do begin Horas := Horas + HourOf(Tempos[i]); Minutos := Minutos + MinuteOf(Tempos[i]); Segundos := Segundos + SecondOf(Tempos[i]); end; Segundos := Segundos + (Minutos * 60) + (Horas * 3600); Horas := Segundos div 3600; Minutos := Segundos div 60 - (Horas * 60); Segundos := Segundos - (Minutos * 60) - (Horas * 3600); Result := Format(´¬.2d:¬.2d:¬.2d´, [Horas, Minutos, Segundos]); end;
Exemplo de uso:
procedure Testa; begin ShowMessage(SomaTTime([StrToTime(´23:59:00´), StrToTime(´16:31:0´)])); end;
Certo?
Gostei + 0
11/02/2009
Junnsouzza
Obrigado!!
Tópico encerrado!!
Gostei + 0
07/07/2020
Josue Rosa
Como fazer funcionar essa Function dentro de um laço While, onde tenho horários dentro de um periodo exemplo 01/07/2020 a 31/07/2020.
Tentei fazer dessa forma:
procedure TfrmPrincipal.BtnCalcularClick(Sender: TObject);
var
TOTAL, TOTAL_DIARIO : String;
begin
if dmdados.FDQTOTAL_APURACAO.RecordCount <> 0 then
begin
dmdados.FDQTOTAL_APURACAO.Delete;
dmdados.FDConnection.Commit;
DMDados.FDQTOTAL_APURACAO.refresh;
end;
//fazer a soma total das horas normais
dmdados.FDQHorarios.first;
while not dmdados.FDQHorarios.Eof do
begin
TOTAL_DIARIO:=TimeToStr(dmdados.FDQHorariosTOTAL_DIARIO.Value);
dmdados.FDQHorarios.Next;
total:= SomaTTime([StrToTime(TOTAL_DIARIO)]);
end;
dmdados.FDQTOTAL_APURACAO.edit;
dmdados.FDQTOTAL_APURACAOTOTAL_HORAS_NORMAIS.Value:=StrtoTime(total);
dmdados.FDQTOTAL_APURACAOCOD_PERIODO.Value:=dmdados.FDQHorariosCOD_PERIODO.Value;
dmdados.FDQTOTAL_APURACAO.Post;
end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)