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

André Garcia Carneiro andre.garcia.carneir em terra.com.br
Quinta Novembro 16 14:02:53 PST 2006


Salve monges!!!

Só queria compartilhar um problema que resolvi, e achei interessante colocar na lista. 

O problema era o seguinte: Precisava estabelecer um horário inicial para a coleta de material dos voluntários
aqui do hospital onde eu trabalho. Depois disso, definir os intervalos de tempo que novas coletas seriam
feitas, por exemplo:

Hora inicial: 07:00 h

Amostra    tempo(min:seg) 
001             basal(0:00) - 7:00
002             0:15
003             0:30
004             0:45
005             1:00
006             2:00
.
.
.
.
026            48:00


Depois disso, em um determinado dia, quando as coletas seriam realizadas, o sistema deverá comparar a hora
programada para cada uma das amostras, por exemplo, para a amostra 002(0:15), ela deve ser recolhida as 7:15,
simplesmente porque a coleta começou as 07:00, a segunda amostra as 7:30, e a 026... as 7:00, claro!! 

Reparem que na amostra 026, eu ainda trato o tempo esperado para o recolhimento da amostra em minutos. E é
claro que o horário que se deve recolher, é as 7:00am . Então a necessidade de se construir um script que faça
isso para mim. Bem, resolvi da melhor forma possível. Se alguem conhecer algum pacote que faça isso, por favor,
não deixe de postar na lista depois, pois não consegui achar no CPAN. Resolvi segundo o script abaixo:


#Objetivo: Se a hora inicial for 07:00:00, e a pessoa digitar mais 48:30, o resultado deve ser 07:30:00

print "HORA_INICIAL: ";
my $hora_inicial = <STDIN>;#digite 07:00 por exemplo

print "Horas:Minutos a somar: ";
my $a_somar = <STDIN>; #digite 96:00 por exemplo

my @otime = split /:/,$hora_inicial;
print "\nOtime_0: $otime[0]\nOtime_1: $otime[1]\n";

my @time = split /:/,$a_somar;

#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);

#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;
       }

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

##FIM DO SCRIPT

Claro, esse foi o que eu usei para testar, mas a ideia foi usada para resolver isso via web.

 

Cheers!






--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



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