Buscar

Últimas inserções

Gerando planilhas XLS para Excel com formatação de colunas
MD5 direto no Sql Server
Aplicação demora muito para inicializar quando VisualStudio está "Loading Symbols"
Fazendo Painel de Leds em menos usando System.Drawing(parte 3)
Fazendo Painel de Leds em menos usando System.Drawing(parte 2)
- TODAS AS DICAS

Top Poggers (sempre)

Jar Jar Binks (136)
Cuban Pete (127)
Tufo (28)

Top Poggers (30 dias)


Área restrita

Logon

pogMasters.NET

Início
Busca Avançada
Contato

RSS
 

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 >>
Nome  
Email
Comentário    
Postar Comentário