[SP-pm] cálculo com tempos em 24:00

Wendel Scardua wendelscardua em gmail.com
Quinta Novembro 16 15:15:29 PST 2006


Já vi alguns problemas... (problemas que eu acho que já tive quando fiz esse
tipo de conta, na época em que eu brincava com QBasic - ah, bons tempos
aqueles...)

On 11/16/06, André Garcia Carneiro <andre.garcia.carneir em terra.com.br>
wrote:
>
> #Calculando a hora:
>         my $hora_calc = $otime[0] + (($time[0] % 24) ); #Descobri por
> acaso, por tentativa e erro....
>
> #Se o resultado der maior que 24, deve-se tirar 24. A diferença é
> exatamente a hora que eu estou calculando.
>         $hora_calc -= 24 if($hora_calc > 24);



Sugiro isso aqui, que faz mais sentido:
my $hora_calc = ($otime[0] + $time[0]) % 24;

(afinal, você quer somar as horas, mas quer que "dê a volta" no 24. A
divisão inteira por 24 dá o número de dias,
o resto da divisão dá as horas que não completam um dia)


#Somando os minutos
>
> #Para somar os minutos, simplesmente some os minutos dados em
> $hora_inicial. Se for maior do que 59,
> #então deve-se somar a hora + 1, e se obter a diferenca dos minutos que
> passaram de 59.
>
>         print $otime[1] + $time[1];
>
>         $min_calc = $otime[1] + $time[1];
>         if($min_calc > 59)
>         {
>                 $min_calc -= 60;
>                 $min_calc = abs $min_calc;
>                 $hora_calc += 1;
>        }



A mesma coisa eu aplicaria aqui:
my $min_calc = $otime[1] + $time[1];

$hora_calc +=  int ($min_calc / 60);  # a divisão inteira por 60 dá a qtd de
horas inteiras
$min_calc = $min_calc % 60;  # e o resto da divisão dá os minutos que não
completam 1 hora


print "\nProxima HORA = $hora_calc\:".$min_calc."  \n";


E aqui eu ainda tascava um

printf "\nProxima HORA = %2d:%2d\n", $hora_calc, $min_calc;

pra não ficar com horas "7:0", "7:30", "8:0", etc... ;-)


##FIM DO SCRIPT
>
> Claro, esse foi o que eu usei para testar, mas a ideia foi usada para
> resolver isso via web.
>
>
>
> Cheers!


E sim, claro que TIMTOWTDI, principalmente do jeito "certo"...
Outra opção POG era converter tudo pra minutos, trabalhar com minutos, e
depois transformar em hh:mm ( h = int ( x / 60) % 24,  m = x % 60 )


ps: agora que me dei conta, depois de

$hora_calc +=  int ($min_calc / 60);  # a divisão inteira por 60 dá a qtd de
horas inteiras

a hora pode ter passado de 24... talvez fosse melhor deixar pro fim das
contas issaqui:

$hora_calc = $hora_calc % 24;

Em vez de calcular o % 24 lá no começo...

-- 
[]s
Wendel

"Não ajustar o auto-ajuste" - http://wendel.scardua.net/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/saopaulo-pm/attachments/20061116/4852598d/attachment.html 


Mais detalhes sobre a lista de discussão SaoPaulo-pm