Por partes

ve se essa função te ajuda , fiz o teste e ela retorna a diferença de horas
entre datas e horas como seu exemplo.

 *Código:*  function FormatHoras(time: double; havDay: boolean): string;
var *dias*, horas: double;
    Pos1, horas24: integer;
    aux1: string;
begin
  *dias*  := trunc(time);
  horas := frac(time);

  if havDay then
    Result := FloatToStr(*dias*) + 'd ' + TimeToStr(horas)
  else begin
    aux1 := TimeToStr(horas);
    pos1 := pos(':', aux1);
    horas24 := StrToInt(copy(aux1, 1, pos1 -1)) + (trunc(*dias*) * 24);
    Result  := IntToStr(horas24) + Copy(aux1, pos1, Length(aux1));
  end;
end;

faz o teste coloca 4 edits no form e um button no evento onclick do button
declara 2 variáveis dt1 e dt2 depois bota esse código:

 *Código:*  dt1        := StrToDateTime(Edit1.Text);
  dt2        := StrToDateTime(Edit2.Text);
  Edit3.Text := FormatHoras(dt2 - dt1, True);
  Edit4.Text := FormatHoras(dt2 - dt1, False);

edit1 recebe a data inicial com a hora
edit2 recebe a data final com a hora
edit3 quantidade de *dias* (resultado edit1 e edit2)
edit4 quantidade de horas (resultado edit1 e edit2)

agora a segunda parte. somas as horas como a soma de horas no delphi so pode
ser feira para resultados ate 24h
entao precisamos de um acumulador de horas

var
// declare as seguintes variaveis
  Acumula: array[1..2] of integer;
  Hora,minuto:Integer;

zera as variaveis hora e minuto

procedure AcumulaHoras(Tempo : TTime);
begin
      //soma a hora passada com com o total acumulador de horas
      Hora:=Hora+StrToInt(Copy(TimeToStr(Tempo),1,2));
      // soma os minutos
      Minuto:=Minuto+StrToInt(Copy(TimeToStr(Tempo),4,2));
      // se passa ou igualar a 60 min , ajusta somando mais uma hora e
deixando os min restantes
      If Minuto >= 60 Then
      Begin
          Hora:=Hora+1;
          Minuto:= minuto - 60;
      end;
      Acumula[1]:=Hora;
      Acumula[2]:=Minuto;
end;



infelizmente tem que ser assim, vc calcula a jornada e depois soma o total
de cada jornada.

ve se te ajuda. t+



Luciano Bruno
Prj. e Desenvolvimento de Software
Especialista em Banco de Dados.

www.simsolution.com.br

Em 8 de agosto de 2010 22:32, SERGIO LOPES <moro...@yahoo.com.br> escreveu:

>
>
> Pedro, eu trabalho com o delphi mas nao o conheco muito bem ainda, em
> situacoes que precisei de um calculo desses eu usei as funcoes decodetime e
> decodedate para separar totalizar subtrair as diferencas. abaixo tem uma
> funcao que criei a muito tempo para contar os dias entre duas datas e a
> opção de incluir ou nao o primeiro dia na contagem, foi feita para calcular
> dias em um periodo muito longo com precisao de dias, so nao tratei caso de
> ano bisexto, tendo a quantidade de dias vc pode decodificar a hora pegar as
> horas até o minuto inicial e as horas do minuto final até as 24:00 e
> subtrair da (quandedias*24h). se vc quizer "precisao" pode converter tudo em
> segundos antes de fazer a calculo e depois converter novamente para hora.
>
> function contardias(datainicio, datafim : TDateTime; contar_primeiro_dia :
> boolean) : integer;
> var  VDia,VMes,VAno,pDia,pMes,pAno : word;
>   vtotal_dias, X : Integer;                                //1  2  3  4  5
> 6  7  8  9  10 11 12
>   const vmes_qdias : array[1..12] of integer =
> (31,28,31,30,31,30,31,31,30,31,30,31);
> begin
>
>   DecodeDate(datafim,pAno,pMes,pdia);
>
>   DecodeDate(datainicio,VAno,VMes,VDia);
>
>   vtotal_dias := VMes_QDIAS[VMES]-VDIA;
>
>   FOR x := 1 to VMes do
>   vtotal_dias := vtotal_dias-VMes_QDIAS[x];
>
>   FOR x := 1 to pMes do
>   vtotal_dias := vtotal_dias+VMes_QDIAS[x];
>
>   vtotal_dias := vtotal_dias-(VMes_QDIAS[pmes]-pdia);
>
>   if contar_primeiro_dia then
>     if datainicio > datafim then
>       vtotal_dias := vtotal_dias-1 else
>       vtotal_dias := vtotal_dias+1;
>
>   vtotal_dias := vtotal_dias+((pAno-VAno)*365);
>
>   Result := VTOTAL_DIAS;
>
> end;
>
> é meio groseira mas funciona. espero ter dado uma ideia de como resolver o
> seu problema. se nao conseguir posta me avisa que mando uma funcao pronta
> para vc. mas acredito que há posibilidade de fazer esse calculo de maneira
> mais simples convertendo a data e hora para ponto flutuante, subtrair os
> dois valores e converte novamente para data e hora, nunca tentei mas acho
> que pode funcionar.
>
> --- Em sáb, 7/8/10, Pedro Neves <neve...@yahoo.com <neveshp%40yahoo.com>>
> escreveu:
>
> De: Pedro Neves <neve...@yahoo.com <neveshp%40yahoo.com>>
> Assunto: [delphi-br] Calculo de hora extra
> Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
> Data: Sábado, 7 de Agosto de 2010, 20:56
>
>
>
> Ola, tenho uma base de dados com que armazena data e hora em que os
>
> funcionarios treabalham, agora estou tentando somar as datas e horas por
>
> semana, por exemplo
>
> DataHoraInicio DataHoraFim DiaSemana
>
> 01/08/2010 08:00 02/08/2010 08:00 Domingo
>
> 04/08/2010 08:00 05/08/2010 08:00 Quarta-feira
>
> 07/08/2010 08:00 08/08/2010 08:00 Sábado
>
> Então, gostaria de somar todas as datas e hora entre às 00:00h do dia
>
> 01/08/2010 às 24:00h do dia 07/08/2010.
>
> Grato
>
> Pedro
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Luciano S. Bruno
Consultor em TI


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    delphi-br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a