Subtrair Data e Hora

Delphi

04/07/2005

Senhores Bom dia, estou enfrentando um problema em subtrair horas e nem com a pesquisa do Forum que tem muitos posts sobre o Assunto.
Tenho uma Tabela com 4 Campos sendo:
Data_Entrada
Hora_entrada
Data_Saida
Hora_Saida

POis bem preciso saber quantas horas se passaram entre a Data e hora de entrada e a data e hora da Saida, pensei em armazenar data e Hora no mesmo campo porém estes dados são informado pelo usuario então achei melhor colocar em campo separado, alguém poderia me ajudar a resolver esta dúvida?

Um abraço


Ariovaldo

Ariovaldo

Curtidas 0

Respostas

Ariovaldo

Ariovaldo

04/07/2005

Pessoal Desculpem faltou informação
Uso delphi 7.0 com Firebird 1.5


GOSTEI 0
Cabelo

Cabelo

04/07/2005

Você usa assim...

declare 2 variáveis..

data_hora_entrada, data_hora_saida : TDateTime;

depois no evento específico de sua aplicação..

dê um select na base dos 4 campos..

depois some a data de enytrada com a hora de entrada e armazene em : data_hora_entrada.

depois some a data de saída com a hora de saída e armazene em : data_hora_saída.

o resultado será uma variável menos a outra..

se quiser pode usar assim :

Resultado := (cdsData.fieldbyname(´CAMPO_DATA_SAIDA´).asdatetime + cdsData.fieldbyname(´CAMPO_HORA_SAIDA´).asdatetime) - (cdsData.fieldbyname(´CAMPO_DATA_ENTRADA´).asdatetime + cdsData.fieldbyname(´CAMPO_HORA_ENTRADA´).asdatetime));


GOSTEI 0
Ariovaldo

Ariovaldo

04/07/2005

Senhores fiz conforme fui informado, so que agora cai em outra situação, Na medida em atinge as 24:00 ele Zera o valor das horas e soma um na Data, como poderia fazer para converter este valor [b:d02b6d306d]31/12/1899 01:30:00[/b:d02b6d306d] em horas que na verdade seria 25:30 minutos?


procedure TForm1.Button1Click(Sender: TObject);
Var
DT_Entr, Hr_Entr, DT_Sai, Hr_Sai, data_hora_entrada, data_hora_saida, Total : TDateTime;
begin
Dt_Entr := strtoDate(´04/07/2005´);
Hr_Entr := StrToTime(´08:00:00´);

Dt_Sai := strtoDate(´05/07/2005´);
Hr_Sai := StrToTime(´09:30:00´);

data_hora_entrada := Dt_Entr + Hr_Entr;
data_hora_saida := Dt_Sai + Hr_Sai;

Total := data_hora_saida - data_hora_entrada;
[b:d02b6d306d]Edit1.text := DatetimetoStr(Total);[/b:d02b6d306d]
end;





[b:d02b6d306d]31/12/1899 01:30:00[/b:d02b6d306d]


GOSTEI 0
Cabelo

Cabelo

04/07/2005

Senhores fiz conforme fui informado, so que agora cai em outra situação, Na medida em atinge as 24:00 ele Zera o valor das horas e soma um na Data, como poderia fazer para converter este valor [b:c1cccf0bc8]31/12/1899 01:30:00[/b:c1cccf0bc8] em horas que na verdade seria 25:30 minutos? procedure TForm1.Button1Click(Sender: TObject); Var DT_Entr, Hr_Entr, DT_Sai, Hr_Sai, data_hora_entrada, data_hora_saida, Total : TDateTime; begin Dt_Entr := strtoDate(´04/07/2005´); Hr_Entr := StrToTime(´08:00:00´); Dt_Sai := strtoDate(´05/07/2005´); Hr_Sai := StrToTime(´09:30:00´); data_hora_entrada := Dt_Entr + Hr_Entr; data_hora_saida := Dt_Sai + Hr_Sai; Total := data_hora_saida - data_hora_entrada; [b:c1cccf0bc8]Edit1.text := DatetimetoStr(Total);[/b:c1cccf0bc8] end; [b:c1cccf0bc8]31/12/1899 01:30:00[/b:c1cccf0bc8]


Colega..

Na verdade um valor de TDateTime não passa de um valor extended.. portanto é bem simples..

Pegue o resultado na variável Total, sem formatar string e divida por 24, o resultado será um valor decimal..

aí você pode utilizar os dados inteiros como valor de horas.. certo...

o valor decimal voê terá os minutos..

divida por 60 terá o valor dos minutos..

em uma variável string mostre assim :

Hora_Total : string;

Hora_Total := FormatFloat(´0´, Round(Total / 24) + ´:´ + FormatFloat(´00´,
Frac(Total / 60);


GOSTEI 0
POSTAR