ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Calculo horas motel delphi7

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
well_prestes
Novato
Novato


Registrado: Quarta-Feira, 14 de Abril de 2010
Mensagens: 5

MensagemEnviada: Sex Jun 11, 2010 4:19 pm    Assunto: Calculo horas motel delphi7 Responder com Citação

Ola gente sou novo aqui..
e estou precisando de uma enorme ajuda

estou terminando um programa feito no delphi7 um programa pra motel, mas nao estou conseguindo fazer o calculo de horas ou seja...

assim

tenho q fazer um calculo q
qdo o cliente entra 11/06 as 23:30 e sai 12/06 as 01:30 e apareca o tempo em q ele ficou no motel no caso seria duas horas... não consigo e nem tenho ideia de como faz o delphi calcular isso...

preciso de ajuda urgente pq meu trabalho tem q ta pronto até dia 21/06/2010 e hj é 11/06/2010...

se alguem souber como faz isso pleeeassse!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Felipe.a350
Novato
Novato


Registrado: Quinta-Feira, 5 de Março de 2009
Mensagens: 95

MensagemEnviada: Sex Jun 11, 2010 5:00 pm    Assunto: Responder com Citação

aeee fmz?

ve se esse post te ajuda

Código:
http://forum.devmedia.com.br/viewtopic.php?t=85357&sid=fe7341cbb10e07c0241d6887d7984d2b
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Sex Jun 11, 2010 6:17 pm    Assunto: Responder com Citação

horas := (fim - inicio) * 24
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
well_prestes
Novato
Novato


Registrado: Quarta-Feira, 14 de Abril de 2010
Mensagens: 5

MensagemEnviada: Sex Jun 11, 2010 11:36 pm    Assunto: Responder com Citação

o codigo do link dá erro na linha

dtmHoraFim := dtmpckrFinal.DateTime + StrToTime(edtHoraFinal.Text);

e eu na sei o que é, e Hora:=(hora2-hora1)*24
não deu certo la no meu código...

que que eu faço?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
well_prestes
Novato
Novato


Registrado: Quarta-Feira, 14 de Abril de 2010
Mensagens: 5

MensagemEnviada: Sex Jun 11, 2010 11:42 pm    Assunto: Responder com Citação

tava fazendo em um Form a parte esse código

var
Form1: TForm1;
hora1: TDateTime;
hora2: TDateTime;
total: TDateTime;

procedure TForm1.Button1Click(Sender: TObject);
begin
hora1 := StrToTime(Edit1.Text);
hora2 := StrToTime(Edit2.Text);
total := (Hora2 - Hora1)*24;
Label1.Caption := FormatDateTime('hh:nn:ss',total);

end;

tentei com a ajuda q me deram de
Hora:=(hora2-hora1)*24

mais quando executo no label aparece só 00:00:00 e mais nada, o que tem de errado com o codigo será?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
whsystems
Novato
Novato


Registrado: Quinta-Feira, 10 de Junho de 2010
Mensagens: 25

MensagemEnviada: Sáb Jun 12, 2010 1:18 pm    Assunto: Responder com Citação

Cara, é meio cabuloso trabalhar com diferença entre data e hora juntos heheh mas vamos lá, eu fiz um exemplo aqui mas o fórum não permite anexos, coloquei no rapidshare quem quiser fazer o download ai pra entender melhor...

Download (RapidShare) (Delphi 2010)

Fui meio exagerado talvez no exemplo pessoal pq essa questão de data e hora é chato de entender (pelo menos foi pra mim) pois o mesmo em caso de trabalhar no runtime ele é equivalente a valores extended então isso fica chato vc saber o que se refere aquele valor então no exemplo eu coloquei alguns edits pra exibir o valor extended referente aquela data e ou hora pra ficar melhor de se entender ok???

Pelo que entendi nos seus códigos vc trabalha com edit para inserir a hora, cara te aconselho vc usar um DateTimePicker, no caso de hora vc muda a propriedade Kind dele pra dtkTime mas num deixa edit não, usuário com déficit de inteligência vai fazer cagada com certeza hehehehehee

Mas aqui vai a lógica da brincadeira:
Código:

procedure TForm1.btn1Click(Sender: TObject);
Var DifDias : Integer;
    Hora, Minuto, Segundos, MSegundos : Word;
    VlrHora, VlrPagar : Currency;
begin
  edt_dtI.Text := FloatToStr(dtp_dtI.Date); {Exibe o valor extended da data incial}
  dtp_tmrI.Date := dtp_dtI.Date; {Declara que o datepicker hora inicial recebe a data que foi selecionada como inicial}
  edt_tmrI.Text := FloatToStr(dtp_tmrI.Time); {Exibe o valor extended da hora inicial}

  edt_dtF.Text := FloatToStr(dtp_dtF.Date); {Exibe o valor extended da data final}
  dtp_tmrF.Date := dtp_dtF.Date;{Declara que o datepicker hora final recebe a data que foi selecionada como final}
  edt_tmrF.Text := FloatToStr(dtp_tmrF.Time); {Exibe o valor extended da hora final}

  if dtp_tmrF.DateTime < dtp_tmrI.DateTime then {Verfico se a data final é menor que a data inicial}
  begin
    ShowMessage('Ops. Data/Hora final menor que Data/Hora inicial');
    pcd_limpaEdts; {Procedimento bobo só pra limpar os edts! hehehehehe}
    Exit;
  end;

  edt_DataHoraInicial.Text := FormatDateTime('dd/mm/yyyy - hh:nn:ss',FloatToDateTime(dtp_tmrI.DateTime)); {Exibe como ficou a data e hora inicial}
  edt_DataHoraFinal.Text := FormatDateTime('dd/mm/yyyy - hh:nn:ss',FloatToDateTime(dtp_tmrF.DateTime)); {Exibe como ficou a data e hora final}


  DifDias := StrToInt(FormatFloat('00',Trunc(dtp_tmrF.Date) - Trunc(dtp_tmrI.Date))); {Calcula a diferença de dias entre as duas datas finais}
  DecodeTime((dtp_tmrF.DateTime - dtp_tmrI.DateTime),Hora, Minuto, Segundos,MSegundos); {Extrai da diferença entre as datas finais a hora, minuto, segundo e milésimo de segundo}

  if DifDias <> 0 then {Verfico se existe uma diferença de dias}
    Hora := Hora + (DifDias*24); {Somo na hora a quantidade de horas por dias a mais}

  edt_Diferenca.Text := FormatFloat('00',Hora)+':'+FormatFloat('00',Minuto)+':'+FormatFloat('00',Segundos); {Exibo num edit a diferença de horas};
  edt_DiferencaDias.Text := FormatFloat('00',DifDias); {Exibo num edit a diferença de dias!}

  VlrHora := StrToFloatDef(spn_VlrHora.Text,0);
  {
    Acho que tá todomundo careca de saber isso aqui mas vou colocar pra confirmar kkkkk
    1 hora = 60 minutos = 3600 segundos
    ok?
    (desculpe se estou parecendo ser ironico, mas não é isso não é que gosto das coisas claras ok?)
  }
  VlrPagar := (VlrHora * Hora); {Calcula o valor das horas!}
  VlrPagar := VlrPagar + ((VlrHora / 60) * Minuto); {Soma o valor da hora com a fração de uma hora pelos minutos}
  VlrPagar := VlrPagar + ((VlrHora / 3600) * Segundos); {Soma o valor da hora com a fração de uma hora pelos segundos }

  edt_VlrPagar.Text := FormatCurr('R$ #,##0.00',VlrPagar); {Exibe o em o valor!!!}
end;



Aqui tá o procedimento bobo de limpar os edits hehehehe
Código:

procedure TForm1.pcd_limpaEdts;
begin
  edt_dtI.Clear;
  edt_tmrI.Clear;
  edt_dtF.Clear;
  edt_tmrF.Clear;
  edt_Diferenca.Clear;
  edt_DataHoraFinal.Clear;
  edt_DataHoraInicial.Clear;
  edt_Diferenca.Clear;
  edt_DiferencaDias.Clear;
  edt_VlrPagar.Clear;
  dtp_dtF.SetFocus;
end;



Acho que é só pessoal....

Espero ter ajudado!!!


Abraços!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
whsystems
Novato
Novato


Registrado: Quinta-Feira, 10 de Junho de 2010
Mensagens: 25

MensagemEnviada: Sáb Jun 12, 2010 3:50 pm    Assunto: Responder com Citação

Tb acho que vai te ajudar:

http://www.activedelphi.com.br/forum/viewtopic.php?t=41472&highlight=minutos+++dias
_________________


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sáb Jun 12, 2010 5:00 pm    Assunto: Responder com Citação

eis um processo bem mais simples:


Código:

procedure TForm1.Button1Click(Sender: TObject);
var
   result_horas, hora_ini, Hora_fin: TTime;
begin
     hora_ini := StrToTime(Edit1.Text);
     Hora_fin := StrToTime(Edit2.Text);

     if hora_ini > hora_fin then
     begin
          result_horas := StrToTime('23:59:59') - hora_ini + StrToTime('00:00:01') + Hora_Fin;
     end
     else
          result_horas := Hora_Fin - hora_ini;

     ShowMessage(TimeToStr(result_horas));
end;





PS: não serve para acumular horas, se vc for acumular horas que ultrapassem as 24 horas terá de utilizar outro método...


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
well_prestes
Novato
Novato


Registrado: Quarta-Feira, 14 de Abril de 2010
Mensagens: 5

MensagemEnviada: Sáb Jun 12, 2010 5:29 pm    Assunto: whsystems Responder com Citação

o seu codigo deu certo aqui... bem o que eu precisava...
mas ainda continua com o problema, se eu colocar a data incial e a data final junto com a hora inicial e hora final do mesmo dia, o programa faz tudo direitinho,

Ex:
data inicial = 12/06/2010
data final = 12/06/2010

hora inicial = 17:14:00
hora final = 19:37:00

diferença em horas = 02:23:00
valor hora = 15,33

aparece a diferença CORRETA de 02:23:00 com o valor total a pagar de R$ 36,54
mas se eu mudar assim:

Ex:
data inicial = 12/06/2010
data final = 13/06/2010

hora inicial = 23:30:00
hora final = 01:30:00

diferença em horas = 26:00:00
valor hora = 15,33

aparece a diferença de 26:00:00 horas e o valor de R$ 398,58.
sendo que eu preciso que apareça nessa diferença apenas as 02:00:00 horas corretas e não 26:00:00
porque no caso ele entrou as 23:30 e saiu as 01:30 (12/06 23:30/ - 13/06 00:30/01:30) ficou duas horas e nao 26hrs

se alguém souber como fazer isso no código ai em cima do ***whsystems*** me ajude..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sáb Jun 12, 2010 5:58 pm    Assunto: Responder com Citação

bem amigo desta maneira é posível calcular os dias com as horas, bem dizer utilizando-se do mesmo princípio:


Código:

procedure TForm1.Button4Click(Sender: TObject);
var
   result_horas, data_ini, data_fin: TDateTime;
   Dias: Integer;
begin
     data_ini := StrToDateTime(Edit1.Text);
     data_fin := StrToDateTime(Edit2.Text);
     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;






PS.: se houver algum problema com a data utilize a funçao Frac() na comparação de horas

bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
well_prestes
Novato
Novato


Registrado: Quarta-Feira, 14 de Abril de 2010
Mensagens: 5

MensagemEnviada: Sáb Jun 12, 2010 7:08 pm    Assunto: Responder com Citação

viu johnny-walker

tem como vc fazer a hora aparecer do showmessage, aparecer em um edit, nesse código q vc me passou?

procedure TForm1.Button1Click(Sender: TObject);
var
result_horas, hora_ini, Hora_fin: TTime;
begin
hora_ini := StrToTime(Edit1.Text);
Hora_fin := StrToTime(Edit2.Text);

if hora_ini > hora_fin then
begin
result_horas := StrToTime('23:59:59') - hora_ini + StrToTime('00:00:01') + Hora_Fin;
end
else
result_horas := Hora_Fin - hora_ini;

ShowMessage(TimeToStr(result_horas));
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sáb Jun 12, 2010 8:00 pm    Assunto: Responder com Citação

Eu te dei desta forma, pois se um cliente ficar mais de 24 horas será 1 dia

tb daria para formatar desta maneira utilizando a função format:
10D00:55:00 o que daria 10 dias e 55 minutos....

vai fazendo os testes aih, não testei todos os poréns...

Sim, é possível colocar num edit ou outro componente sem problemas...
Sim, tb é possivel calcular por hora, vc pode utilizar decodetime para isto, caso queira facilitar as coisas...


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB