Fórum Erro ao calcular horas entre datas distantes. #409652
23/11/2011
0
calcular a quantidade de horas entre 10/11/2011 e 23/11/2011 pois da o erro: 311:29:54 is not a valid time. Mas se eu calcular as horas entre horas dentro de 24 horas o calculo funciona perfeitamente, utilizo uma função para calcular:
function TFrmSeparacao.calculatempo(data1, data2: TDateTime): String;
var
valor, horas, minutos, segundos : Integer;
begin
valor := (SecondsBetween(data1,data2));
horas := valor div 3600;
minutos := valor div 60 - horas * 60;
segundos := (valor - (horas *3600 + minutos * 60));
Result := Format(%0.2d:%0.2d:%0.2d, [horas, minutos, segundos]);
end;
Codigo do botão:
procedure TFrmSeparacao.btnFSepClick(Sender: TObject);
var
MinhaData1, MinhaData2: TDateTime;
SQLQuery1,SQLQuery2 : TSQLQuery;
begin
SQLQuery1 := TSQLQuery.Create(Self);
SQLQuery1.SQLConnection := DMServer.Conexao; // SQLCONNETION1
SQLQuery1.SQL.Add(select current_Date from rdb$database);
SQLQuery1.Open;
data2.Text := SQLQuery1.Fields[0].AsVariant;
SQLQuery1.Free;
SQLQuery2 := TSQLQuery.Create(Self);
SQLQuery2.SQLConnection := DMServer.Conexao; // SQLCONNETION1
SQLQuery2.SQL.Add(select current_time from rdb$database);
SQLQuery2.Open;
dbehfinal.Text := SQLQuery2.Fields[0].AsVariant;
SQLQuery2.Free;
MinhaData1 := StrToDateTime( Data1.Text + dbeHinicial.Text );
MinhaData2 := StrToDateTime( Data2.Text + dbeHfinal.Text );
dbeHtotal.Text := calculatempo( MinhaData1, MinhaData2 );
DBRadioGroup1.ItemIndex := 1;
FSep:=1;
end;
Alguem poderia me ajudar ?
Rogerio Sena
Curtir tópico
+ 0Posts
23/11/2011
Gustavo Bretas
Espero não ter almentado sua dúvida!
Gostei + 0
23/11/2011
Rogerio Sena
Eu utilizo o bd firebird com ibexpert.Ainda estou confuso.
Obrigado.
Gostei + 0
23/11/2011
Leonardo Xavier
Gostei + 0
23/11/2011
Rogerio Sena
Gostei + 0
23/11/2011
Leonardo Xavier
//Na declaração de sua função: function calculatempo(data1, data2: TDateTime): String; //Na declaração das variáveis: MinhaData1,MinhaData2:TDate; data1,data2:string; //Na função: function TForm1.calculatempo(data1, data2: TDateTime): String; var valor, horas, minutos, segundos : Integer; begin valor := (SecondsBetween(data1,data2)); horas := valor div 3600; minutos := valor div 60 - horas * 60; segundos := (valor - (horas *3600 + minutos * 60)); Result := Format(%0.2d:%0.2d:%0.2d, [horas, minutos, segundos]); end; //No botão do cálculo procedure TForm1.Button1Click(Sender: TObject); begin MinhaData1 := DateTimePicker1.date; MinhaData2 := DateTimePicker2.date; label4.caption:= calculatempo( MinhaData1, MinhaData2 ); end;
Gostei + 0
24/11/2011
Rogerio Sena
MinhaData1 := DateTimePicker1.date;
Tenho 5 DBEdits:
dbeHinicial que ao inserir um registro é colocado a hora do bd firebird no campo e
data1 que é colocado a data do bd firebird no campo.
data2 que ao clicar no botao finalizar que seria mesma coisa que um calcular
é colocado a data do bd firebird no campo e dbeHfinal que insere a
hora do bd firebird no campo e entao e feito o calculo e jogado dentro
do 5ºDBEdit dbeHtotal.
O programinha e para controlar separação de notas,um funcionario pega a nota e é
inserido o registro com a data e hora.Quando o funcionário entrega a nota é feita
uma pesquisa trazendo os dados ai clicando em finalizar é adicionado a data final
a hora final e feito o calculo,colocando o total de horas no dbeHtotal.
Gostei + 0
24/11/2011
Leonardo Xavier
Gostei + 0
24/11/2011
Leonardo Xavier
http://www.4shared.com/file/Lxc-rT7f/calcdata.html?
Gostei + 0
24/11/2011
Rogerio Sena
mas obrigado por sua ajuda aprendi mais uma com vc,vou tentar resolver o problema e qd
resolver te passo.
Obrigado tenha um ótimo dia ....
Gostei + 0
24/11/2011
Rogerio Sena
e bimba deu certo e ainda grava no formato de horas sem que eu fizesse alterações pois
erda o codigo do botão.
Obrigado por sua atenção e se tiver alguma duvida sua que eu posso estar ajudando futuramente sera um
prazer ajudalopois uma mao lava a outra rsrsrsrs
Gostei + 0
24/11/2011
Leonardo Xavier
Gostei + 0
24/11/2011
Rogerio Sena
Gostei + 0
24/11/2011
Leonardo Xavier
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)