Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 1847 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Pessoal
Não e possivel usar o recurso mod do delphi para pegar resto do tempo

NO execel fiz assim

 


No delphi tentei fazer DiferencaTime:= TimeA mod TimeB;
Mas o mod só recebe inteiro? Eu defini todas 3 variaveis como Time (DiferencaTime, TimeA e TimeB)

unnamed.png

Editado por johnbh3
Postado
13 minutos atrás, johnbh3 disse:

Pessoal
Não e possivel usar o recurso mod do delphi para pegar resto do tempo

NO execel fiz assim

 


No delphi tentei fazer DiferencaTime:= TimeA mod TimeB;
Mas o mod só recebe inteiro? Eu defini todas 3 variaveis como Time (DiferencaTime, TimeA e TimeB)

 

 

unnamed.png

Postado
4 minutos atrás, Daniel Simoes disse:

Use o método HoursBetween()  de DateUtils.pas

Eu rento um retorno de erro "47:59:59" is not valid time
De fato não e uma hora valida.

Mas no exemplo eu como no excel eu teria um retorno de 1 segundo

  • Moderadores
Postado
18 horas atrás, johnbh3 disse:

No delphi tentei fazer DiferencaTime:= TimeA mod TimeB;

DiferencaTime := TimeA - TimeB;

18 horas atrás, johnbh3 disse:

Não e possivel usar o recurso mod do delphi para pegar resto do tempo

Tanto no Delphi como no Excel MOD é o resto de uma divisião, e não diferença.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado (editado)
6 minutos atrás, BigWings disse:

DiferencaTime := TimeA - TimeB;

Infelizmente não seria este o caso também. Eu queria pegar o resto. Se eu fizer um menos o outro daria 25:52:24
Outro problema que o timeA pode ter acumulo de horas como "47:59:59" dando erro is not valid time. 

Eu queria obter um resultado semelhante ao do excel. Eu peguei 47 hrs usei o MOD com tempo pre-derminado (TimB) que vai ser sempre  menor que 24 hrs. Dai o tempo restante pegaria como uma sobra.

 

Seria tipo um estacionamento. Carro chega, fica lá, 1, 2, dias dando 48 horas. O Estacionamento cobra algo tipo R$ 30,00 reais a diaria, porem ele ficou 2 dias e 2 horas. Iria cobrar 30 reais das 2 diárias + 2 horas avulsa, a titulo de exemplo seria isto. 
 

Editado por johnbh3
  • Moderadores
Postado
1 minuto atrás, johnbh3 disse:

Infelizmente não seria este o caso também. Eu queria pegar o resto. Se eu fizer um menos o outro daria 25:52:24
Outro problema que o timeA pode ter acumulo de horas como "47:59:59" dando erro is not valid time. 
 

Com TDateTime você pode acumular as horas que se tornam dias.

Você quer a diferença entre duas horas ou o resto da divisão de uma pela outra?

Explique melhor.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado

Então queria o resto da divisão (TimeA) acumula horas até tudo bem, usei TDateTime  para me retornar o acumulo de horas com uma função.

Veja exemplo da imagem, acumulou 49:42:53 e fiz um mod por 24:59:59 na coluna a, mas o usuario pode definir que pra ele 1 diaria seria quando atingir 20 hrs. Observe  que o resto e diferente

Quando e considerado 24 hrs o resto que sobra e 1:52:25 agora se eu considerar como 20 Hrs cobrar 1 diaria o resto seria 9:52:23
Neste caso achei o tempo excedente, quando considerado 24 hrs excedeu 1 hora e 52 min, se considerar 20 hrs uma diaria  excedeu  9 horas e 52 min

Consegui me entender?

 

unnamed.png

  • Moderadores
Postado
6 minutos atrás, johnbh3 disse:

Consegui me entender?

Pelo que entendi é o resto de divisão mesmo, e como você já percebeu o MOD só aceita inteiros.

Acho que você pode fazer algo assim:

Resto := (TimeA / TimeB) - Trunc(TimeA / TimeB);

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado

De toda forma vou ter o erro de TimeA com hora invalida "49:52:53"

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Resto,TimeA,TimeB:TTime;
begin
  TimeA:=StrToTime(Edt_TimeA.Text);
  TimeB:=StrToTime(Edt_TimeB.Text);
  Resto := (TimeA / TimeB) - Trunc(TimeA / TimeB);
  Edit1.Text:=TimeToStr(Resto) ;

end;

Postado

Eu fiz uma conversão da hora para segundos aparentemente vai resolver. 
TimeA:=(SecondsBetween(data1,data2))
TimeB:=ScondsBetween(HoraDiaria),StrToTime('00:00:00'))

Resto:=TimeA mod TimeB;

 

Depois usei esta função

function SecondToTime( Segundos : Cardinal ) : String;
var
  Seg, Min, Hora: Cardinal;
begin
  Hora := Segundos div 3600;
  Seg := Segundos mod 3600;
  Min := Seg div 60;
  Seg := Seg mod 60;
  Result := FormatFloat(',00', Hora) + ':' +
  FormatFloat('00', Min) + ':' +
  FormatFloat('00', Seg);
end;

 

Converti o segundos por hora

  • Moderadores
Postado
1 hora atrás, johnbh3 disse:

De toda forma vou ter o erro de TimeA com hora invalida "49:52:53"

Por isso comentei que você deveria usar TDateTime e não TTime.

52 minutos atrás, johnbh3 disse:

Eu fiz uma conversão da hora para segundos aparentemente vai resolver. 

Certo, que bom que resolveu.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • 2 semanas depois ...
  • Administradores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 1847 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...