 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
rafaelmgobo Novato


Registrado: Sexta-Feira, 19 de Julho de 2013 Mensagens: 63
|
Enviada: Sex Jan 08, 2016 7:00 am Assunto: Dúvida - Trabalhando com data e hora no delphi. |
|
|
Bom dia.
Estou com dúvida referente a data e horas no delphi.
Exemplo, preciso verificar quanto deu de um usuário, calculando por data.
Como se fosse um estacionamento.
Valor da hora é 4 reais.
Usuário chegou as 13:30 ficou até as 15:30, como calcular isso?
Outra também, tenho configurado no sistema o tempo de tolerância, que não sera cobrada, o campo é varchar.
Exemplo, ele colocou lá "00:30" , sendo meia hora não cobra nada.
Como vou fazer para comparar se o tempo deu essa tolerancia?
Desde já, muito obrigado.... _________________ Delphi XE4 + Oracle. |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
|
Voltar ao Topo |
|
 |
rafaelmgobo Novato


Registrado: Sexta-Feira, 19 de Julho de 2013 Mensagens: 63
|
Enviada: Sex Jan 08, 2016 2:04 pm Assunto: |
|
|
Não deu certo não, precisava fazer o cálculo para ver quanto ficou, baseando no valor da hora é 5 reais, quanto ficaria meia hora?
Como calcular essa meia hora, e como chegar até ela..
Tem uma query q criei Q_Tempo, porem não esta funcionando perfeitamente.. da variaçoes no tempo, testei e não está ok
Citação: | SELECT TRUNC((((86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))/60)/60)/24) DIAS,
TRUNC(((86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))/60)/60)-24*(trunc((((86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))/60)/60)/24)) HORAS,
TRUNC((86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))/60)-60*(trunc(((86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))/60)/60)) MINUTOS,
TRUNC(86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))-60*(trunc((86400*(MAX(SYSDATE)-MIN(DENTRREGIS)))/60)) SEGUNDOS
FROM CESREGIS
WHERE NNUMEREGIS = :Registro |
_________________ Delphi XE4 + Oracle. |
|
Voltar ao Topo |
|
 |
souzacruz001 Aprendiz

Registrado: Quarta-Feira, 11 de Junho de 2014 Mensagens: 273
|
Enviada: Sex Jan 08, 2016 2:20 pm Assunto: |
|
|
[EDITADO]
Boa tarde, rafaelmgobo.
Para calcular o tempo de permanência, você pode utilizar a função MinutesBetween que está em DateUtils.
Já referente ao cálculo, basta você pegar o tempo de permanência (em minutos) e multiplicar pelo valor das horas divido pela quantidade de minutos.
Ou seja:
Tempo de permanência: 30 minutos.
Valor da hora: R$ 5,00
30 * (5 / 60) = R$ 2,50
Espero ter ajudado.
Quanto ao tempo de tolerância você deverá ter uma coluna no BD que irá receber o horário que ele entrou, caso, durante a saída essa diferença seja menor ou igual à 30, não cobra. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Jan 08, 2016 2:45 pm Assunto: |
|
|
Boa tarde,
rafaelmgobo, não sei muito bem como são as regras para esse caso, mas segue um trecho de código que talvez possa ser utilizado como base se for para fazer os calculos na aplicação:
Código: | procedure TForm2.Button1Click(Sender: TObject);
var
HoraEntrada, HoraSaida: TDateTime;
Tolerancia, QtdHoras, RestoMinutos: integer;
begin
Tolerancia := 30;
HoraEntrada := EncodeDateTime(2016, 1, 8, 15, 0, 0, 0);
HoraSaida := EncodeDateTime(2016, 1, 8, 15, 30, 0, 0);
QtdHoras := HoursBetween(HoraEntrada, HoraSaida);
RestoMinutos := HourOf(HoraSaida) * 60 +
MinuteOf(HoraSaida) -
HourOf(IncHour(HoraEntrada, QtdHoras)) * 60 -
MinuteOf(HoraEntrada);
if RestoMinutos > 0 then
if (QtdHoras > 0) or
(RestoMinutos > Tolerancia) then
Inc(QtdHoras);
ShowMessage('Quantidade de horas: ' + IntToStr(QtdHoras));
end; |
obs: necessário adicionar a unit DateUtils na uses
Espero que seja útil
Editado pela última vez por imex em Ter Mar 07, 2023 5:15 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
rafaelmgobo Novato


Registrado: Sexta-Feira, 19 de Julho de 2013 Mensagens: 63
|
Enviada: Seg Jan 11, 2016 2:11 pm Assunto: |
|
|
Perfeito, muito obrigado pela ajuda.
Porem, nesse caso esta calculando por minutos, mais eu tenho também que considerar dias, por que a pessoa pode deixar mais de um dia o carro no local, ai faz o mesmo processo pra calcular? _________________ Delphi XE4 + Oracle. |
|
Voltar ao Topo |
|
 |
souzacruz001 Aprendiz

Registrado: Quarta-Feira, 11 de Junho de 2014 Mensagens: 273
|
Enviada: Seg Jan 11, 2016 2:18 pm Assunto: |
|
|
rafaelmgobo, utiliza o mesmo processo, mas atenção, a data no banco de dados deve estar ser dd/mm/yyyy hh:mm:ss para conseguir calcular o período em minutos, feito isso, o cálculo continua o mesmo. |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|