Ajuda com Procedure
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
Curtidas 0
Respostas
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
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
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
13/12/2010
Isso eu corrigi, e ficou na mesma
GOSTEI 0
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.
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
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
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.
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
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