Fórum Hora maior que 24 #297536

28/09/2005

0

Como faço para transformar um astring que contem por exemplo o valor ´36´ em horas???

Eu estou fazendo:

StrToTime(´36´);

Mas 36 não é uma hora valida e eu gostaria que fosse, qp elea é uma somatorias de varias horas.

Obrigada


Celamar

Celamar

Responder

Posts

28/09/2005

Rjun

Que tipo de operação você pretende fazer?


Responder

Gostei + 0

28/09/2005

Celamar

Eu fiz:


  //total previsto
  sTotalPrevisto := IntToStr(iTotalDias * iCargaHoraria);
  lbTotalPrevisto.Caption := sTotalPrevisto + ´:00´;

  //total executado
  lbTotalExecutado.Caption := TimeToStr(tTotalExecutado);

  //saldo
  tTeste := StrTotime(sTotalPrevisto);
  lbSaldo.Caption := TimeToStr(tTotalExecutado - tTeste);


O numero de horas previsto no mês
O numero de horas trabalhadas
E O Saldo


Responder

Gostei + 0

28/09/2005

Rjun

Trabalhe com segundos. Dê uma pesquisada no forum que tem como converter os segundos em uma string no formato de hora. Talvez isso resolva seu problema.


Responder

Gostei + 0

28/09/2005

Massuda

Você pode fazer algo assim...
var
  iTotalPrevisto: Integer;
...
  //total previsto
  iTotalPrevisto := iTotalDias * iCargaHoraria;
  sTotalPrevisto := IntToStr(iTotalPrevisto);
  lbTotalPrevisto.Caption := sTotalPrevisto + ´:00´;

  //total executado
  lbTotalExecutado.Caption := TimeToStr(tTotalExecutado);

  //saldo
  tTeste := iTotalPrevisto / 24;
  lbSaldo.Caption := FormatDateTime(´d h:mm:ss´ , tTotalExecutado - tTeste);



Responder

Gostei + 0

28/09/2005

Celamar

Tem certeza q isso da certo, comigo nao funcionou nao.


Responder

Gostei + 0

28/09/2005

Celamar

Desculpa car, funciona sim, eu que estava marcando.
Obrigada


Responder

Gostei + 0

29/09/2005

Celamar

Gostaria de saber como faço para trabalhar com o TTime quando a hora passa de 23:59:59, por exemplo:

Dia um = 12:00
Dia dois = 10:00
Dia tres = 8:00

Total = 30:00h

Obrigada


Responder

Gostei + 0

29/09/2005

Massuda

O TTime (assim como o TDate e o TDateTime) é um número que representa um total de dias; a parte inteira é o número de dias e a parte fracionária é a fração de dia. Por exemplo, 36 horas equivale a um TTime igual a 1.5, ou seja, um dia (24 horas) mais 12 horas.

Para exibir o valor da forma que você quer, use uma função para formatar parecida com esta...
function Exemplo(T: TTime): string;
var
  H, M, S, MS: Word
begin
  DecodeTime(T, H, M, S, MS);
  Result := Format(´¬d:¬02d:¬02d´, [Int(T)*24 + H, M, S]);
end;
...é meio complicado, mas o Delphi só possui (acho) funções que consideram a hora no intervalo entre 0 e 23.


Responder

Gostei + 0

29/09/2005

Celamar

Mas deu errode incompatibilidade

DecodeTime(tPrevistoAux, H, M, S, MS);
lbSaldo.Caption := Format(´¬d:¬02d:¬02d´, [Int(tPrevistoAux)*24 + H, M, S]);

Erro: Format ¬d invalid or incompatible with argument


Responder

Gostei + 0

29/09/2005

Massuda

Desculpe... o correto seria...
  lbSaldo.Caption := Format(´¬d:¬02d:¬02d´, [Trunc(tPrevistoAux)*24 + H, M, S]);



Responder

Gostei + 0

29/09/2005

Luineumann

pq vc não armazena o total de horas em um campo integer?

se vc controla apenas horas inteiras soma 1 a cada hora

se vc controla horas e minutos faz alguma coisa assim para armazenar

decodetime(tempo, hh, mm, ss, sss);

horas_a_somar := (hh * 60) + mm;

horas_totais := horas_totais + horas_a_somar;


no final do mês, decompoe o campom horas_totais


aux := horas_totais;
dias := 0;
horas := 0;
minutos := 0;

while aux > 23
do begin
dias := dias + 1;
aux := aux - 24;
end

while aux > 59
do begin
horas := horas + 1;
aux := aux - 60;
end;

minutos := aux;

ao final desta rotina vc tem o tempo total em dias, horas e minutos


Responder

Gostei + 0

29/09/2005

Celamar

Valores reais:
- Total previsto = 28:00h
- Total realizado = 16:26

Para:
lbSaldo.Caption := Format(´¬d:¬02d:¬02d´, [Trunc(tPrevistoAux)*24 + H, M, S]);

Resultado = 672:0:0

Para: dias, horas, minutos

Resutlado = 9 dias, 0 horas 23 minutos

E teria que ser 11:34 devedor


Responder

Gostei + 0

29/09/2005

Martins

O TTime (assim como o TDate e o TDateTime) é um número que representa um total de dias; a parte inteira é o número de dias e a parte fracionária é a fração de dia. Por exemplo, 36 horas equivale a um TTime igual a 1.5, ou seja, um dia (24 horas) mais 12 horas. Para exibir o valor da forma que você quer, use uma função para formatar parecida com esta...
function Exemplo(T: TTime): string;
var
  H, M, S, MS: Word
begin
  DecodeTime(T, H, M, S, MS);
  Result := Format(´¬d:¬02d:¬02d´, [Int(T)*24 + H, M, S]);
end;
...é meio complicado, mas o Delphi só possui (acho) funções que consideram a hora no intervalo entre 0 e 23.


E se vc mudar o [b:40c874e330]Int[/b:40c874e330] para [b:40c874e330]Trunc[/b:40c874e330], funcionária como vc quer?


Responder

Gostei + 0

29/09/2005

Massuda

tPrevistoAux está com o valor 28, o que o código está interpretando como 28 dias e não 28 horas. Poste o código que está calculando o tPrevistoAux.


Responder

Gostei + 0

29/09/2005

Martins

Desculpe... o correto seria...
  lbSaldo.Caption := Format(´¬d:¬02d:¬02d´, [Trunc(tPrevistoAux)*24 + H, M, S]);


É isso memso [b:3518da8088]Massuda[/b:3518da8088], mandou bem novamente, só pra variar, hehe!!!

t +


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar