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 

Dúvida - Trabalhando com data e hora no delphi.

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


Registrado: Sexta-Feira, 19 de Julho de 2013
Mensagens: 63

MensagemEnviada: Sex Jan 08, 2016 7:00 am    Assunto: Dúvida - Trabalhando com data e hora no delphi. Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Sex Jan 08, 2016 8:33 am    Assunto: Responder com Citação

veja se este post ajuda:

http://www.activedelphi.com.br/forum/viewtopic.php?t=90612&highlight=hora
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafaelmgobo
Novato
Novato


Registrado: Sexta-Feira, 19 de Julho de 2013
Mensagens: 63

MensagemEnviada: Sex Jan 08, 2016 2:04 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
souzacruz001
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 11 de Junho de 2014
Mensagens: 273

MensagemEnviada: Sex Jan 08, 2016 2:20 pm    Assunto: Responder com Citação

[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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Jan 08, 2016 2:45 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rafaelmgobo
Novato
Novato


Registrado: Sexta-Feira, 19 de Julho de 2013
Mensagens: 63

MensagemEnviada: Seg Jan 11, 2016 2:11 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
souzacruz001
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 11 de Junho de 2014
Mensagens: 273

MensagemEnviada: Seg Jan 11, 2016 2:18 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
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