Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
well_prestes Novato
Registrado: Quarta-Feira, 14 de Abril de 2010 Mensagens: 5
|
Enviada: Sex Jun 11, 2010 4:19 pm Assunto: Calculo horas motel delphi7 |
|
|
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 |
|
|
Felipe.a350 Novato
Registrado: Quinta-Feira, 5 de Março de 2009 Mensagens: 95
|
Enviada: Sex Jun 11, 2010 5:00 pm Assunto: |
|
|
aeee fmz?
ve se esse post te ajuda
Código: | http://forum.devmedia.com.br/viewtopic.php?t=85357&sid=fe7341cbb10e07c0241d6887d7984d2b |
|
|
Voltar ao Topo |
|
|
gilsonnrodrigues Moderador
Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sex Jun 11, 2010 6:17 pm Assunto: |
|
|
horas := (fim - inicio) * 24 |
|
Voltar ao Topo |
|
|
well_prestes Novato
Registrado: Quarta-Feira, 14 de Abril de 2010 Mensagens: 5
|
Enviada: Sex Jun 11, 2010 11:36 pm Assunto: |
|
|
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 |
|
|
well_prestes Novato
Registrado: Quarta-Feira, 14 de Abril de 2010 Mensagens: 5
|
Enviada: Sex Jun 11, 2010 11:42 pm Assunto: |
|
|
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 |
|
|
whsystems Novato
Registrado: Quinta-Feira, 10 de Junho de 2010 Mensagens: 25
|
Enviada: Sáb Jun 12, 2010 1:18 pm Assunto: |
|
|
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 |
|
|
whsystems Novato
Registrado: Quinta-Feira, 10 de Junho de 2010 Mensagens: 25
|
|
Voltar ao Topo |
|
|
johnny-walker Moderador
Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Jun 12, 2010 5:00 pm Assunto: |
|
|
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 |
|
|
well_prestes Novato
Registrado: Quarta-Feira, 14 de Abril de 2010 Mensagens: 5
|
Enviada: Sáb Jun 12, 2010 5:29 pm Assunto: whsystems |
|
|
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 |
|
|
johnny-walker Moderador
Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Jun 12, 2010 5:58 pm Assunto: |
|
|
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 |
|
|
well_prestes Novato
Registrado: Quarta-Feira, 14 de Abril de 2010 Mensagens: 5
|
Enviada: Sáb Jun 12, 2010 7:08 pm Assunto: |
|
|
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 |
|
|
johnny-walker Moderador
Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Jun 12, 2010 8:00 pm Assunto: |
|
|
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 |
|
|
|