Calcular tempo de fabricação entre duas datas/horas

Delphi

29/09/2005

olá pessoal

Tenho no meu sistema uma tabela com a seguinte estrutura:

#CD_FAB (integer)
DT_INI (date)
HR_INI (time)
DT_FIM (date)
HR_FIM (time)
...

Preciso saber o tempo de fabricação que é a diferença de DT_INI/HR_INI e DT_FIM/HR_FIM, observando que eu posso iniciar a fabricação hj e terminar em mais de um dia, ou seja, pode levar um ou varios dias.

qual a meneira mais simples e que retorna um resultado rápido ?

obrigado
Diogo


Diogoalles

Diogoalles

Curtidas 0

Respostas

Marco Salles

Marco Salles

29/09/2005

Da para brincar de muitas formas diferentes :

function calcularDiferencaHoras(Dataf,datai:Tdate;HoraF,HoraI:ttime):TDateTime;
var
DataHoraF,DataHoraI:TDateTime;
begin
DataHoraF:=DataF+HoraF;
DataHorai:=DataI+HoraI;
if DataHoraI > DataHoraF
  result:=DataHoraI - DataHoraF
else
  result:=DataHoraF - DataHoraI;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
Dias:Integer;
Total,Horas:Real;
DT_INI :tdate;
HR_INI :ttime;
DT_FIM :tdate;
HR_FIM :ttime;
begin
DT_FIM:=StrToDate(Edit1.text);
HR_FIM:=StrToTime(Edit2.text);
DT_INI:=StrToDate(Edit3.text);
HR_INI:=StrToTime(Edit4.text);
Total:=calcularDiferencaHoras(DT_FIM,DT_INI,HR_FIM,HR_INI);
Dias:=Trunc(total);
Horas:=total - Trunc(total);
Showmessage(´Tem :  ´+inttostr(dias)+´ Dias e Tem Horas :  ´+timetostr(Horas));
end;



GOSTEI 0
Diogoalles

Diogoalles

29/09/2005

olá pessoal

Esqueci de dizer que o resultado tem q ser em horas, minutos, segundos -mesmo se for um ou mais dias. Poderei ter resultados 99h,30m,44s

valeu
Diogo


GOSTEI 0
Diogoalles

Diogoalles

29/09/2005

Outra questão que gostaria de levantar,

puderam perceber que tenho 2 campos tipo DATE e 2 campos tipo TIME.

seria mais interessante eu criar um tipo TIMESTAMP ? (nunca utilizei, mas li. Como usá-lo e fazer o calculo da diferença? e como faço para ´quebrá-lo´ para ter a data e/ou hora separados?

utilizo FB 1.5

obrigado
Diogo


GOSTEI 0
Marco Salles

Marco Salles

29/09/2005

Esqueci de dizer que o resultado tem q ser em horas, minutos, segundos -mesmo se for um ou mais dias. Poderei ter resultados 99h,30m,44s


Amigo , a resposta ja foi dada ... Pois dias tem 24 Horas e so somar e fazer um algebrismo

Daqui ha pouco eu posto


GOSTEI 0
Marco Salles

Marco Salles

29/09/2005

function calcularDiferencaHoras(Dataf,datai:Tdate;HoraF,HoraI:ttime):TDateTime;
var
DataHoraF,DataHoraI:TDateTime;
begin
DataHoraF:=DataF+HoraF;
DataHorai:=DataI+HoraI;
if DataHoraI > DataHoraF then
  result:=DataHoraI - DataHoraF
else
  result:=DataHoraF - DataHoraI;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
Dias:Integer;
Total,Horas:Real;
QuerEmHorasMinutosSegundos:string;
H,M,S,SS:Word;
DT_INI :tdate;
HR_INI :ttime; 
DT_FIM :tdate;
HR_FIM :ttime; 
begin
DT_FIM:=StrToDate(Edit1.text);
HR_FIM:=StrToTime(Edit2.text); 
DT_INI:=StrToDate(Edit3.text);
HR_INI:=StrToTime(Edit4.text); 
Total:=calcularDiferencaHoras(DT_FIM,DT_INI,HR_FIM,HR_INI); 
Dias:=Trunc(total);
Horas:=total - Trunc(total);
Decodetime(Horas,H,M,S,SS);
H:=H+24*TRunc(dias);

QuerEmHorasMinutosSegundos:=FormatFloat(´#00´,H)+´:´+FormatFloat(´00´,m)
+´:´+FormatFloat(´00´,s);
Showmessage(QuerEmHorasMinutosSegundos);
end;



GOSTEI 0
Júnior Brito

Júnior Brito

29/09/2005

Boa Noite,

Gostaria de saber se tem alguma maneira de calcular somente dias úteis?

Desde já agradeço!
GOSTEI 0
Michel

Michel

29/09/2005

Olá Sir / Sra
Nós oferecemos nossos serviços para pessoas honestas que estão em necessidade de apoio financeiro ou atividades geradoras de renda e criar um futuro melhor com uma taxa de juros de 2% considerado.
Eu diria que estou pronto para dar ao indivíduo.
Oferecemos-lhe empréstimos entre particular, de 2.000 € para 10.000.000 € para termos muito simples.
Estou disponível e disposto a discutir todas as suas necessidades financeiras nas seguintes áreas:

-Empréstimos imobiliários
-Empréstimos de investimento
-Auto empréstimo
-Consolidação da dívida
-Linha de crédito
-Segundas hipotecas
-Resgate de crédito
-Empréstimos pessoais

Não hesite em contactar-nos se você estiver interessado, o período de reembolso entre um para cada ano de acordo com a soma emprestada.
Nossos termos de empréstimo são:

- Um formulário para preencher.
- Um acordo de empréstimo deve ser feita pelo nosso notário
- Nossos empréstimos estão sujeitos a juros de 2% ao ano.
- Nossos empréstimos são normalmente pagos por cheque ou transferência bancária.

Me contactado por mail: michelalbertplanq@outlook.fr
No refrão sério!
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

29/09/2005

GOSTEI 0
Raphael Pacheco

Raphael Pacheco

29/09/2005

function calcularDiferencaHoras(Dataf,datai:Tdate;HoraF,HoraI:ttime):TDateTime;
var
DataHoraF,DataHoraI:TDateTime;
begin
DataHoraF:=DataF+HoraF;
DataHorai:=DataI+HoraI;
if DataHoraI > DataHoraF then
  result:=DataHoraI - DataHoraF
else
  result:=DataHoraF - DataHoraI;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
Dias:Integer;
Total,Horas:Real;
QuerEmHorasMinutosSegundos:string;
H,M,S,SS:Word;
DT_INI :tdate;
HR_INI :ttime; 
DT_FIM :tdate;
HR_FIM :ttime; 
begin
DT_FIM:=StrToDate(Edit1.text);
HR_FIM:=StrToTime(Edit2.text); 
DT_INI:=StrToDate(Edit3.text);
HR_INI:=StrToTime(Edit4.text); 
Total:=calcularDiferencaHoras(DT_FIM,DT_INI,HR_FIM,HR_INI); 
Dias:=Trunc(total);
Horas:=total - Trunc(total);
Decodetime(Horas,H,M,S,SS);
H:=H+24*TRunc(dias);

QuerEmHorasMinutosSegundos:=FormatFloat(´#00´,H)+´:´+FormatFloat(´00´,m)
+´:´+FormatFloat(´00´,s);
Showmessage(QuerEmHorasMinutosSegundos);
end;




E como faz para calcular em dinheiro o valor do resultado das horas decorridas?
GOSTEI 0
POSTAR