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