Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

elyfesn21

[Resolvido] Calcular Horas

Recommended Posts

Olá pessoal!

 

Tenho uma tabela no Access com um campo Horas Trabalhadas no formato DateTime. Meu problema é somar os registros selecionados por uma pesquisa...

Sabe-se que o delphi não soma horas superiores a 23:59:59. Alguém sabe como resolver? poderiam montar um exemplo, por favor?

 

Agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Fiz um exemplo básico do que você deve fazer...

Teste e veja o que você precisa, acha-se rotinas bem feitas de calculos de horas na net, mas basicamente é isso que você precisa

 

procedure TForm1.Button1Click(Sender: TObject);
var
  Horas : TTime;
  TempoTotal : TDateTime;
  Dias  : Integer;
  TotalHoras : Integer;
begin
  TempoTotal := StrToDateTime('14:00') + StrToTime('14:00') ;

  Horas := TempoTotal;

  showMessage(DateTimeToStr(TempoTotal));

  Dias := DaysBetween(strToDateTime('30/12/1899'), TempoTotal );

  showmessage(IntToStr(Dias) + ' dias e ' + TimeToStr(Horas) + ' horas ');

  TotalHoras := (Dias * 24) + HourOf(Horas);

  showMessage(IntToStr(TotalHoras));

end;

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Fiz um exemplo básico do que você deve fazer...

Teste e veja o que você precisa, acha-se rotinas bem feitas de calculos de horas na net, mas basicamente é isso que você precisa

 

procedure TForm1.Button1Click(Sender: TObject);
var
  Horas : TTime;
  TempoTotal : TDateTime;
  Dias  : Integer;
  TotalHoras : Integer;
begin
  TempoTotal := StrToDateTime('14:00') + StrToTime('14:00') ;

  Horas := TempoTotal;

  showMessage(DateTimeToStr(TempoTotal));

  Dias := DaysBetween(strToDateTime('30/12/1899'), TempoTotal );

  showmessage(IntToStr(Dias) + ' dias e ' + TimeToStr(Horas) + ' horas ');

  TotalHoras := (Dias * 24) + HourOf(Horas);

  showMessage(IntToStr(TotalHoras));

end;

 

Att.

 

 

Obrigado! Funciona sim!!

Eu encontrei na internet algo similar... no entanto estou com problemas em relação a soma dos registros na query...

Já tentei de tudo e o resultado da soma sempre é inferior a 24hs. Quando a soma é aplicada a 2 horários em 2 Edit's funciona perfeitamente, agora na tabela NÂO!

 

Já procurei na internet, mas nada funcional em relação a soma de registros no formato DateTime...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente...

 

É o seguinte... utilize uma variavel do tipo TDateTime para acumular as horas...

Por exemplo

 

var AcumuladorHoras : TDateTime;
    Dias  : Integer;
    TotalHoras : Integer;
    Horas : TTime;

while not qry.EOF then begin
  AcumuladorHoras := AcumuladorHoras + qry.FieldByName('TEMPO').asDateTime;
  qry.Next;
end;
Horas := AcumuladorHoras;
Dias := DaysBetween(strToDateTime('30/12/1899'), AcumuladorHoras );
TotalHoras := (Dias * 24) + HourOf(Horas);
showMessage(IntToStr(TotalHoras));

 

 

Algo parecido com isso, nada dificil demais... abraço

att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente...

 

É o seguinte... utilize uma variavel do tipo TDateTime para acumular as horas...

Por exemplo

 

var AcumuladorHoras : TDateTime;
    Dias  : Integer;
    TotalHoras : Integer;
    Horas : TTime;

while not qry.EOF then begin
  AcumuladorHoras := AcumuladorHoras + qry.FieldByName('TEMPO').asDateTime;
  qry.Next;
end;
Horas := AcumuladorHoras;
Dias := DaysBetween(strToDateTime('30/12/1899'), AcumuladorHoras );
TotalHoras := (Dias * 24) + HourOf(Horas);
showMessage(IntToStr(TotalHoras));

 

 

Algo parecido com isso, nada dificil demais... abraço

att.

 

 

Legal, é isso mesmo!

Nunca tinha trabalhado com horas...por isso ainda preciso de sua ajuda...

seguinte Vinicius... seu exemplo calcula as horas...como eu devo fazer para calcular também os minutos e segundos?

preciso obter o resultado no formato 00:00:00.

ah...prometo que é a última pergunta...hehehe

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Amigo...

 

Primeiramente não é recomendado mostrar as horas no formato HH:MM:SS... e se passar de 100 horas? e se passar de 1000 horas?

>> 1254:49:31 isso fica muito estranho

 

Mas saindo das questões filosóficas... se quiser fazer assim mesmo utilize isto

Então, é só verificar as funções de horas, minutos e segundos que conseguirá fazer.

Troque a ultima linha por essa e

 

  showMessage(FormatFloat('00', (Dias * 24) + MinuteOf(Horas)) + ':' + FormatFloat('00', MinuteOf(Horas)) + ':' + FormatFloat('00', SecondOf(Horas)));

PS. vamos quebrar a cabeça um pouco né meu caro... e faça uma função pra isso, que você entre com um TDateTime e te retorna uma String 00:00:00, o que acha?

 

Abrassss

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Amigo...

 

Primeiramente não é recomendado mostrar as horas no formato HH:MM:SS... e se passar de 100 horas? e se passar de 1000 horas?

>> 1254:49:31 isso fica muito estranho

 

Mas saindo das questões filosóficas... se quiser fazer assim mesmo utilize isto

Então, é só verificar as funções de horas, minutos e segundos que conseguirá fazer.

Troque a ultima linha por essa e

 

  showMessage(FormatFloat('00', (Dias * 24) + MinuteOf(Horas)) + ':' + FormatFloat('00', MinuteOf(Horas)) + ':' + FormatFloat('00', SecondOf(Horas)));

PS. vamos quebrar a cabeça um pouco né meu caro... e faça uma função pra isso, que você entre com um TDateTime e te retorna uma String 00:00:00, o que acha?

 

Abrassss

Att.

 

Muito obrigado pela ajuda...agora já consigo! e...obrigado pela dica em relação ao formato HH:MM:SS.

Até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.