Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marostegan

[Resolvido] subtrair hora

Recommended Posts

olá pessoa... em meu sistema to fazendo um relatorio de visitas.

 

nesse relatorio tem os seguintes campos:

 

hora de entrada

hora de saida

tempo total

 

entao o usuario vai preencher a hora de entrada e a hora de saida dai o sistema tem que que calcular quanto tempo o tecnico ficou no lugar e jogar o resultado no campo tempo total....

 

mas eu nao sei como fazer isso... (trabalhar com hora e data eu faço um rolo só... =// )

 

alguem pode me ajudar nisso?

 

ah... meu BD é access

 

obrigado pessoal!! http://forum.imasters.com.br/public/style_emoticons/default/natal_noel.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

você pode usar duas variáveis TDateTime e subtraí-las. Não se esqueça que a subtração é (Data Inicial + Hora Inicial) - (Data Final + Hora Final), você não pode esquecer que a data faz diferença, subtrair 24:00 hs de 23:00 hs no mesmo dia é uma coisa mas se os dias forem diferentes, claro que o resultado será diferente.

 

veja um exemplo bobo:

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dateutils, StdCtrls;

type
  TForm1 = class(TForm)
	Button1: TButton;
	procedure Button1Click(Sender: TObject);
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;

var
  Form1: TForm1;
  DatIni: TDateTime;
  DatFim: TDateTime;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   datres: TDateTime;
begin
   DatIni:= now;
   sleep(10000);
   DatFim:= Now;
   DatRes:= DatFim - DatIni;
   showmessage(timetostr(DatRes));
end;

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

você pode usar duas variáveis TDateTime e subtraí-las. Não se esqueça que a subtração é (Data Inicial + Hora Inicial) - (Data Final + Hora Final), você não pode esquecer que a data faz diferença, subtrair 24:00 hs de 23:00 hs no mesmo dia é uma coisa mas se os dias forem diferentes, claro que o resultado será diferente.

 

veja um exemplo bobo:

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dateutils, StdCtrls;

type
  TForm1 = class(TForm)
	Button1: TButton;
	procedure Button1Click(Sender: TObject);
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;

var
  Form1: TForm1;
  DatIni: TDateTime;
  DatFim: TDateTime;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   datres: TDateTime;
begin
   DatIni:= now;
   sleep(10000);
   DatFim:= Now;
   DatRes:= DatFim - DatIni;
   showmessage(timetostr(DatRes));
end;

end.

 

como q eu faço pra DatIni e DatFim puxar os valores de Edits??

Compartilhar este post


Link para o post
Compartilhar em outros sites

No lugar de DatFim e DatIni coloque os edits, sendo:

 

StrToDateTime(editDatFim.Text) e StrToDateTime(editDatIni.Text)

 

Ou pode ainda usar TDateTimePicker, fica mais simples...

 

 

poxa.... nao consigo fazer!! http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

 

como fica a programação?

 

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, basta copiar e substituir...

 

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(TimeToStr(StrToDateTime(editDatFim.Text) - StrToDateTime(editDatIni.Text)));
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, basta copiar e substituir...

 

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(TimeToStr(StrToDateTime(editDatFim.Text) - StrToDateTime(editDatIni.Text)));
end;

 

olá amigo!! obrigado, funcionou certinho.... ficou assim aki:

 

var
   datres: TDateTime;
begin
   DatIni:= now;
   sleep(10000);
   DatFim:= Now;
   DatRes:= DatFim - DatIni;
   Edit3.Text := (TimeToStr(StrToDateTime(editDatFim.Text) - StrToDateTime(editDatIni.Text)));
end;

 

só tem 1 probleminha...

 

essa operaçao, pra ele dar o resultado do calculo, está demorando muito, cerca de 10 a 15 segundos...

 

depois que coloca o horario de entrada e o de saida e clico em calcular, ele trava o sistema e volta só depois de 10 / 15 seg. com o resultado...

 

entao pra resolver eu retirei da programaçao o seguinte:

 

sleep(10000);

ai ficou legal, rapidinho... mas... pra que essa linha serve? tem problema ficar sem ela?

 

obrigado....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Sleep = dormir.

Este comando deixa o programa "dormindo", sem executar nada. Eu só coloquei para ter a subtração de um tempo pelo outro, ou seja, a diferença de tempo no exemplo sempre será 10 segundos. Para você utilizar, tem que retirar esta linha mesmo.

 

PS: 10000 milisegundos = 10 segundos

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi!

 

beleza, tirei ele daqui!

 

está funcionando certinho, do jeito que eu precisava mesmo!

 

obrigado!

 

abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá....

 

andei verificando aqui no Delphi que ele estava avisando que tinha coisa que nao estava sendo usada... ai vi que nessa programação as seguintes linhas estao sem utilidade:

 

var
   datres: TDateTime;

begin
	 DatRes:= DatFim - DatIni;

obrigado....

 

abraços....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.