Ajuda com Procedure

Delphi

13/12/2010

Pessoal tudo bem? Estou precisando de ajuda com a procedure abaixo Com ela consigo o seguinte resultado por exemplo. 2 dia(s) e 05:34:30 – ok Porém como fazer para obter o seguinte resultado >>>>>>  53:34:30   procedure TFRmodelofornos.Button1Click(Sender: TObject); var    result_horas, data_ini, data_fin: TDateTime;    Dias: Integer; begin      data_ini := DM2.cds1controleproducaodataentradasist.AsDateTime;;      data_fin := DM2.cds1controleproducaodatasaidasist.AsDateTime;      Dias := Trunc(data_fin - data_ini);      if data_ini > data_fin then      begin           result_horas := StrToDateTime('23:59:59') - data_ini + StrToDateTime('00:00:01') + data_fin;      end      else           result_horas := data_fin - data_ini;      ShowMessage(Format('%d dia(s) e %s ', [Dias, TimeToStr(result_horas)])); end;  
Valdecir Peres

Valdecir Peres

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

13/12/2010

faça assim:

procedure TFRmodelofornos.Button1Click(Sender: TObject);
var
   result_horas, data_ini, data_fin: TDateTime;
   Dias,x: Integer;
begin
     data_ini := DM2.cds1controleproducaodataentradasist.AsDateTime;;
     data_fin := DM2.cds1controleproducaodatasaidasist.AsDateTime;
     Dias := Trunc(data_fin - data_ini);
    
          if data_ini > data_fin then begin
          

              result_horas := StrToDateTime('23:59:59') - data_ini + StrToDateTime('00:00:01') + data_fin;
       
             end  else   

               result_horas := data_fin - data_ini;
         end;
          for x=1 to dias do begin
             result_horas:=resulthoras+ StrToDateTime('23:59:59');
         end;                  ShowMessage(Format('%d dia(s) e %s ', [Dias, TimeToStr(result_horas)])); end;

GOSTEI 0
Valdecir Peres

Valdecir Peres

13/12/2010

  Leonardo Xavier, obrigado pela atenção.   Mas não alterou em nada o resultado, continuo recebendo o mesmo valor.    
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

13/12/2010

  Leonardo Xavier, obrigado pela atenção.   Mas não alterou em nada o resultado, continuo recebendo o mesmo valor.    


tinha um erro no meu código:

          for x=1 to dias do begin
             result_horas:=result_horas+ StrToDateTime('23:59:59');
         end;
GOSTEI 0
Valdecir Peres

Valdecir Peres

13/12/2010

  Isso eu corrigi, e ficou na mesma    
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

13/12/2010

tente assim:

var
  data_ini, data_fin: TDateTime;
  intervalo: double;
  horas: int64;
  minutos, segundos: byte;
begin
  data_ini := DM2.cds1ControleProducaoDataEntradaSist.AsDateTime;
  data_fin := DM2.cds1ControleProducaoDataSaidaSist.AsDateTime;

  intervalo := SecondsBetween(data_fin, data_ini);// intervalo em segundos
  horas := trunc(intervalo / 3600);// total de horas
  intervalo := intervalo - (horas * 3600);// retiro do intervalo o total de horas
  minutos := trunc(intervalo / 60);// total de minutos
  segundos := trunc(intervalo - (minutos * 60));// retiro do intervalo o total de minutos

  ShowMessage(Format('%d:%d:%d ', [horas, minutos, segundos]));
end;

acrescente a unit DateUtils na cláusula uses.

GOSTEI 0
Valdecir Peres

Valdecir Peres

13/12/2010

  Emerson, obrigado pela atenção.   Funcionou com hora quebrada tipo 36:50:40, mas com hora redonda fica assim 72:0:0.   Tem como corrigir.  
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

13/12/2010

altere os parâmetros da função Format.

 ShowMessage(Format('%.2d:%.2d:%.2d ', [horas, minutos, segundos]));


esse .2 indica que o valor deve ter ao menos 2 dígitos e, se tiver menos que 2, preenche com zeros à esquerda.
GOSTEI 0
Valdecir Peres

Valdecir Peres

13/12/2010

  Emerson, valeu funcionou legal.   Agora abusando um pouquinho, teria um jeito de descobrir se em um determinado período de data hora ocorreu no período entre 18:00 as 21:00 exemplo:   21/11/2010 16:30:00 ao 22/11/2010 01:45:00 ==è neste caso 03:00 entre 18 e 21   18/11/2010 18:30:00 ao 19/11/2010 19:45:00 ==è neste caso 02:45 entre 18 e 21   É possível fazer algo assim  ????????        
GOSTEI 0
POSTAR