Adicionando ou subtraindo horas
Delphi
28/10/2007 por
Cuban Pete
A um tempão atrás (lá pra 2005) eu fiz essa função pra um sistema de ponto de funcionários que soma horas. Ela soma de -100:00 hs até 1000:00 hs. Na época não conhecia nenhuma função do delphi que fazia o cálculo diretamente com hora, então ela tá toda trabalhando com strings. Não sei ainda se já existe algo assim no delphi. De qualquer forma está aí na íntegra o artigo que publiquei no site www.delphi.eti.br na época que fiz este código.
Bom proveito!!
[Delphi]
{Funcao que soma horas, os calculos negativos vao até}
{-100:00 e os positivos até 1000:00. Uma coisa importante}
{é lembrar que as entradas (valores das variaveis de entrada)}
{são de sempre de 5 ou 6 caracteres, ex.: 'HH:MM' ou} {'HHH:MM'. A operacao a ser realizada é escolhida}
{no parametro operacao, se for menos é subtracao, sendo qqr}
{outra coisa, ou vazio é adicao. Bom uso...}
function TForm1.SomaHoras(valor1, valor2, operacao: string): string;
var ihoras,iminutos, minutos,horas, somaMin, horaFin, minFin, tam: integer;
var pos1,pos2,pos3,pos4, tam2: integer;
var sinal,min,zeros,zeros2,horasF: String;
begin
if (Length(valor1) > 6) OR (Length(valor2) > 6) then
begin
ShowMessage('A Função SomaHoras 1.0 só suporta até'+#13+'centenas
de horas para Adição'
+#13+'e dezenas de horas para subtração!');
exit;
end;
If (Length(valor1) > 6) OR (Length(valor2) > 6) AND (operacao ='menos') then
begin
ShowMessage('A Função SomaHoras 1.0 só suporta até'+#13+'centenas
de horas para Adição'
+#13+'e dezenas de horas para subtração!');
exit;
end;
if Length(valor1)= 5 then
begin
pos2:=4;
pos1:=2;
end
else
begin
pos2:=5;
pos1:=3;
end;
if Length(valor2)= 5 then
begin
pos3:=4;
pos4:=2;
end
else
begin
pos3:=5;
pos4:=3;
end;
iminutos:= StrToInt(Copy (valor1,pos2,2));
ihoras:= StrToInt(Copy (valor1,1,pos1));
iminutos:= iminutos + (ihoras * 60);
minutos:= StrToInt(Copy (valor2,pos3,2));
horas:= StrToInt(Copy (valor2,1,pos4));
minutos:= minutos + (horas * 60);
If operacao ='menos' then
somaMin:= iminutos - minutos
else somaMin:= iminutos + minutos;
horaFin:= somaMin div 60;
minFin:= somaMin mod 60;
If (horaFin < 0) OR (minFin < 0) then
sinal:='-'
else
sinal:='';
min:=IntToStr(abs(minFin));
horasF:=IntToStr(abs(horaFin));
tam := Length(min);
tam2:= Length(horasF);
If tam = 1 then
zeros:='0'
else
zeros:='';
If tam2 = 1 then
zeros2:='0'
else
zeros2:='';
Result:= sinal+zeros2+horasF+':'+zeros+min;
end;
//EXEMPLO:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:= SomaHoras('12:00' {ou uma variavel},'20:00','menos');
end;
// no edit aparecerá -08:00
Comentários sobre o artigo
11/03/2009
por
Daniel
Estou usando este código, mas para subtrair horas a coisa nao funciona direito, vi que só funciona pra diminuir minutos, mas pra horas grande nao, tem outro código? obrigado
12/03/2009
por
Cuban Pete
Olá amigo, faz tempo que eu fiz esse código, mas como diz o artigo, ele funciona de -100:00 hs até 1000:00 hs. somente. Se você estiver usando Delphi.NET procure pelas funções AddHours da classe DateTime.
Faz muito tempo que não mexo com Delphi 7. Mas de qualquer maneira, tente modificar a parte do código que faz a soma, tenho certeza que você fará a adaptação adequada.
Poste um comentário >>
|