[firebase-br] RES: Converter segundos em HH:MM:SS

Zottis bzottis em ig.com.br
Sex Ago 6 07:55:10 -03 2010


Tenho uma função em Delphi que converte minutos para segundos, acho que da
para fazer uma procedure para isso.
É só adaptar.

Espero que ajude.

function FormatSecsToHMS(Secs: LongInt): string;
   var Hrs, Min: Word;
begin
          Hrs := Secs div 3600;
          Secs := Secs mod 3600;
          Min := Secs div 60;
          Secs := Secs mod 60;
          //Result := Format('%d:%d:%d', [Hrs, Min, Secs]);
          Result := Format('%s:%s:%s', [FormatFloat('0',Hrs),
FormatFloat('00',Min), FormatFloat('00',Secs)]);
end;

{    Converter Hora HH:MM:SS em Hora Decimal

    - Dividir os segundos por 60 e somar ao minutos
    - Dividir o resultado acima por 60 e adicionar às horas
    ex: 13:35:42
    - 42/60 = 0.7 -> 35.7
    - 35.7/60 = 0.595 -> 13.595 que é a hora decimal

    Converter a Hora Decimal em HH:MM:SS
    - Multiplicar a parte fraccional por 60 -> a parte inteira são os
minutos
    - Multiplicar a parte fraccional do resultado anterior por 60 -> a parte
inteira são os segundos
    Ex: 13.595
    - 0.595*60 = 35.7 -> 35 minutos
    - 0.7* 60 = 42 -> 42 segundos
    resultado = 13:35:42 }

Function SomaHora2(hora1,hora2:string): string;
  var
     h1,h2,m1,m2:string;
     ttHor,ttMin:integer;
     tthor_str,ttmin_str:string;
     posi:integer;
begin
  if trim(hora1)='' then
     exit;
  if trim(hora2)='' then
     exit;

     posi:= Pos(':',hora1);
     h1 := copy(hora1,1,posi-1); // hora
     m1 := copy(hora1,posi+1,2); // minuto

     posi:=Pos(':',hora2);
     h2:=copy(hora2,1,posi-1); // hora
     m2:=copy(hora2,posi+1,2); // minuto

     tthor := strtoint(h1) + strtoint(h2); // soma horas
     ttmin := strtoint(m1) + strtoint(m2); // soma minutos

       if (ttmin  >  60) then // se soma de minutos for > 60...
         begin // somamos + 1 hora e subtraimos 60 do total de minutos
           tthor    := tthor+1;
           ttmin    := ttmin-60;
         end;

       if (ttmin  =  60) then // se for = a 60...
         begin // somamos a hora e zeramos minutos
           tthor    := tthor+1;
           ttmin    := 0;
         end;

       if (ttmin  >= 0) and (ttmin  <= 9) then
          ttmin_str  := '0'+inttostr(ttmin)
       else
          ttmin_str:=inttostr(ttmin);

       if (tthor>=0) and (tthor<=9) then
          tthor_str:='0'+inttostr(tthor)
       else
     tthor_str:= inttostr(tthor);
     result:= tthor_str+':'+ttmin_str;
end;

Function DiminueHora(hora1,hora2:string): string;
  var
     Minutos1 ,Minutos2  : integer;
     Resultado,   h1,h2,m1,m2:string;
     ttHor,ttMin:integer;
     tthor_str,ttmin_str:string;
     posi:integer;
begin


     minutos1   :=  horatomin(hora1);
     minutos2   :=  horatomin(hora2);

     result  :=  minutos_para_hora(Minutos1 - minutos2);
end;



Function HoraToMin(Hora: String): Integer;
Var   posi:integer;
begin
  if trim(hora) = '' then
     exit;
     posi:= Pos(':',hora);
     Result := (StrToInt(copy(hora,1,posi-1))*60) +
StrToInt(copy(hora,posi+1,2));
end;



Function Minutos_para_Hora(Minutos:integer): string;
   var aux, hr   : integer;
       aux_str, hr_str : string;
begin
   hr          := Trunc(minutos / 60);
   //aux         := Minutos - (hr * 60);
   aux         := minutos mod 60;

{  if (aux >= 0 ) and ( aux <= 9 ) then
        aux_str := '0' + inttostr(aux)
       else
       aux_str := inttostr(aux);

   if (hr >= 0 ) and ( hr <= 9 ) then
          hr_str  := '0' + inttostr(hr)
       else
          hr_str  := inttostr(hr);

     result:= hr_str+ ':' + aux_str;
     //Result      := FormatFloat('000',hr)+':'+FormatFloat('00',aux);}

       if (aux  >  60) then // se soma de minutos for > 60...
         begin // somamos + 1 hora e subtraimos 60 do total de minutos
           hr     := hr + 1;
           aux    := aux - 60;
         end;

       if (aux  =  60) then // se for = a 60...
         begin // somamos a hora e zeramos minutos
           hr    := hr+1;
           aux    := 0;
         end;

       if (aux  >= 0) and (aux  <= 9) then
          aux_str  := '0'+inttostr(aux)
       else
          aux_str:=inttostr(aux);

       if (hr>=0) and (hr<=9) then
          hr_str:='0'+inttostr(hr)
       else
     hr_str:= inttostr(hr);
     result:= hr_str+':'+aux_str;

end;

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Wilson Mota - GMail
Enviada em: quinta-feira, 5 de agosto de 2010 18:25
Para: Lista FireBase
Assunto: [firebase-br] Converter segundos em HH:MM:SS


Ola pessoal.
Tenho um campo que armazema uma valor em segundos, preciso criar uma
procedure onde passo os segundos e me retorne HH:MM:SS.
Ex: 270.80 segundos  -> retorne 04:30:48.
Alguém tem alguma dica de como fazer?
Se souberem como pegar a parte inteira ou fração dos segundos também ajuda,
ai da pra desenvover a procedure.

Obrigado.

Wilson
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista