obtendo o total de horas
Sou novo no forum, mas ouvi boas coisas sobre ele
bom gostaria que alguem pudesse solucionar minha duvida,
preciso somar um monte de horas que estao em um StringGrid
e preciso desse total, mas toda vez que a soma ultrapassa o limite de 23:59, o soma volta para 0:00, alguem sabe se existe alguma funcao para que eu possa somar as horas para obter um total por exemplo de 36:00 horas??
bom gostaria que alguem pudesse solucionar minha duvida,
preciso somar um monte de horas que estao em um StringGrid
e preciso desse total, mas toda vez que a soma ultrapassa o limite de 23:59, o soma volta para 0:00, alguem sabe se existe alguma funcao para que eu possa somar as horas para obter um total por exemplo de 36:00 horas??
Felippe
Curtidas 0
Respostas
Aroldo Zanela
18/05/2004
Colega,
O ideal é utilizar variáveis contendo data e hora, pois como você já percebeu, a unidade de medida para horas começa em 00:00 à 23:59 e ao ultrapassar o limite final o contador de dias é incrementado.
Portanto, basta pegar a data e hora final, subtrair da data e hora inicial, converter tudo para a mesma base para saber o tempo decorrido na base selecionada.
O ideal é utilizar variáveis contendo data e hora, pois como você já percebeu, a unidade de medida para horas começa em 00:00 à 23:59 e ao ultrapassar o limite final o contador de dias é incrementado.
Portanto, basta pegar a data e hora final, subtrair da data e hora inicial, converter tudo para a mesma base para saber o tempo decorrido na base selecionada.
GOSTEI 0
Felippe
18/05/2004
Muito obrigado pela dica,
mas usei alguns ´artificios técnicos´ e consegui fazer uma somatória das horas
precisa somar varias horas para ter um total de horas em 6 semanas
por exemplo 236:50 minutos
bom vou colocar o codigo aki caso alguem precise
apesar que como disse isso é uma gambiarra naum respeitando a orientação a objetos ou qualquer outra coisa soh me contactar
mas usei alguns ´artificios técnicos´ e consegui fazer uma somatória das horas
precisa somar varias horas para ter um total de horas em 6 semanas
por exemplo 236:50 minutos
bom vou colocar o codigo aki caso alguem precise
apesar que como disse isso é uma gambiarra naum respeitando a orientação a objetos ou qualquer outra coisa soh me contactar
//Codigo criar um botao no form procedure TFormCadHorario.Button1Click(Sender: TObject); var d1 : TTime; d2 : TTime; total :TTime; Totalhoras : Integer; VerificaMin :Integer; //variaveis para usar na funcao decodetime Hour :word; Min :word; Sec :word; Msec :Word; Hour2 :word; Min2 :word; Sec2 :word; Msec2 :Word; Hourt :word; Mint :word; Sect :word; Msect :Word; begin d1 := StrToTime(Edit1.Text); d2 := StrToTime(Edit2.Text); //soma as horas total := d1+d2; //funcao que da horas minutos, segundos e milisegungos DecodeTime(d1, Hour, Min, Sec, MSec); DecodeTime(d2, Hour2, Min2, Sec2, MSec2); DecodeTime(total, Hourt, Mint, Sect, MSect); //Exibe a quantidade de horas em integer :o) yeah Totalhoras:=hour + hour2; VerificaMin:=0; if(Totalhoras >= 24) then begin if(Min + min2 > 59) then VerificaMin:= VerificaMin+1; TotalHoras := TotalHoras + VerificaMin; Edit3.Text := IntToStr(TotalHoras) + ´:´ +inttostr(Mint); end else Edit3.Text := inttostr(Hourt) + ´:´ +inttostr(Mint) ; end; //
GOSTEI 0
Carlosmielke
18/05/2004
transforme as horas em minutos e some e daí faça a conversão de minutos para horas ou seja, inteiro para string
carlos mielke
carlos mielke
GOSTEI 0
Spider
18/05/2004
1º tem-se duas funções:
//*********** transforma hora em minutos *************//
function HoraMinuto(valor : String):Integer;
var minuto : integer;
begin
minuto:=strtoint(copy(valor,1,pos(´:´,valor)-1))*60;
minuto:=minuto+strtoint(copy(valor,pos(´:´,valor)+1,2));
result := minuto;
end;
//*********** transforma minutos em horas *************//
function MinutoHora(valor : integer):String;
var hora,minuto : integer;
begin
hora:=valor div 60;
minuto:=valor mod 60;
result := formatfloat(´00´,hora)+´:´+formatfloat(´00´,minuto);
end;
2º StringGrid + Button + Label;
no OnClick do Button
var i,total:integer;
begin
total:=0;
for i:=1 to StringGrid1.RowCount-1 do
total:=total+HoraMinuto(StringGrid.Cells[3,1]); //3 coluna das horas
label1.caption:=MinutoHora(Total);
end;
//*********** transforma hora em minutos *************//
function HoraMinuto(valor : String):Integer;
var minuto : integer;
begin
minuto:=strtoint(copy(valor,1,pos(´:´,valor)-1))*60;
minuto:=minuto+strtoint(copy(valor,pos(´:´,valor)+1,2));
result := minuto;
end;
//*********** transforma minutos em horas *************//
function MinutoHora(valor : integer):String;
var hora,minuto : integer;
begin
hora:=valor div 60;
minuto:=valor mod 60;
result := formatfloat(´00´,hora)+´:´+formatfloat(´00´,minuto);
end;
2º StringGrid + Button + Label;
no OnClick do Button
var i,total:integer;
begin
total:=0;
for i:=1 to StringGrid1.RowCount-1 do
total:=total+HoraMinuto(StringGrid.Cells[3,1]); //3 coluna das horas
label1.caption:=MinutoHora(Total);
end;
GOSTEI 0