shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Calculo com horarios


From: Everton Aparecido Onofre
Subject: Re: [shell-script] Calculo com horarios
Date: Wed, 10 Sep 2003 12:34:19 -0300

Tive  o mesmo problema ha um tempo atrás e bolei uma função que converte 
horas em minutos... Sou iniciante em programação, por isso o metodo ficou 
extenso. Veja o script e as observações que inserí logo abaixo:

Vamos supor que seus dados de entrada estejam desta forma:

inicio:11:20
fim:12:10

Será necessário separa as horas dos minutos:

        HORA_INICIO=`fgrep Inicio ${ARQUIVO} | cut -d : -f 2`
        MINUTO_INICIO=`fgrep Inicio ${ARQUIVO} | cut -d : -f 3`
        HORA_FIM=`fgrep Fim ${ARQUIVO} | cut -d : -f 2`
        MINUTO_FIM=`fgrep Fim ${ARQUIVO} | cut -d : -f 3`

Agora é preciso converter as HORAS em MINUTOS. Depois vamos somar as HORAS 
CONVERTIDAS com os MINUTOS:

        CONV_HORA_INI=`echo "$HORA_INICIO * 60" | bc`  # converte horas p/ 
minutos
        CONV_HORA_FIM=`echo "$HORA_FIM * 60" | bc`

        TOTAL_HORA_INI=`echo "$CONV_HORA_INI + $MINUTO_INICIO" | bc` # 
soma HH + MM
        TOTAL_HORA_FIM=`echo "$CONV_HORA_FIM + $MINUTO_FIM" | bc`


Agora ficou fácil: Para obter o tempo total, subtraia o inicio pelo fim:

        TEMPO_TOTAL=`echo "$TOTAL_HORA_FIM - $TOTAL_HORA_INI" | bc` # 
tempo total em MINUTOS

Caso o tempo total seja maior que 60 minutos, teremos que converter o seu 
valor para horas:

        # Se TEMPO_TOTAL em minutos for maior que 60, teremos que 
convertê-lo
        # em horas para poder gerar o relatório. Existe uma funcao pra 
isso, que
        # será evocada tendo $TEMPO_ATIVACAO como seu "$1"
        if [ $TEMPO_TOTAL -ge "60" ];then
                ConverteMinutos $TEMPO_TOTAL    # chama a função 
conversora
                TOTAL_TOTAL="$TEMPO_CONVERTIDO"  # $TEMPO_CONVERTIDO é o 
resultado da função "ConverteMinutos"
        else
                TOTAL_ATIVACAO="00:${TEMPO_TOTAL}"      # mostra o tempo 
em minutos no formato HH:MM
        fi 

Segue a função:

ConverteMinutos()
{
 ### Função ConverteMinutos: Responsável pela conversão de minutos para 
horas.
 # Transformar os minutos ($1) em horas, através de sua divisao por 60
 # O SCALE=3 do comando determina o numero de casas decimais
 CONVERSAO_GERAL=`echo "scale=3;$1 / 60" | bc`

 # Captura somente os digitos antes da virgula
 CONVERSAO_HORAS=`echo $CONVERSAO_GERAL | cut -d . -f 1`
 
 # Captura digitos após a virgula, transformando início de linha em "0." 
(zero-ponto)
 CONVERSAO_MINUTOS=`echo $CONVERSAO_GERAL | cut -d. -f2 | sed 's/^/0./'` 

 # Converte os digitos após a virgula em minutos novamente
 CALC_CONVERSAO_MINUTOS=`echo "$CONVERSAO_MINUTOS * 60" | bc`

 # Com estes dígitos convertidos, separa antes e depois da virgula
 CALC_CHECK1=`echo ${CALC_CONVERSAO_MINUTOS} | cut -d . -f 1`
 CALC_CHECK2=`echo ${CALC_CONVERSAO_MINUTOS} | cut -d . -f 2 | cut -c 1`

 # Caso o dig. depois da virgula seja maior que 5, arredondar os minutos
 [ "$CALC_CHECK2" -gt "5" ] && let CALC_CHECK1++
 # Caso o dig. antes da virgula seja menor que 10,incluir o "0" na frente
 [ "$CALC_CHECK1" -lt "10" ] && CALC_CHECK1="0$CALC_CHECK1"
 [ "$CONVERSAO_HORAS" -lt "10" ] && CONVERSAO_HORAS="0$CONVERSAO_HORAS"

 TEMPO_CONVERTIDO="$CONVERSAO_HORAS:$CALC_CHECK1" 
}

Dificil, eu sei... alguem conhece um jeito mais facil para esta conversão? 
Não me digam que já existe um comando que faz isso! hehehe. Abraço!

Everton Aparecido Onofre
Técnico em Telecomunicações
EOP03  - Gestão de Acessos
GRUPO TELEFÔNICA NO BRASIL
Tel: 55 - 11 - 3038-7213 
address@hidden
http://www.telefonica.com.br 




"Rangel, Luciano" <address@hidden>
10/09/03 11:59
Responder a shell-script

 
        Para:   "'address@hidden'" <address@hidden>
        cc: 
        Assunto:        [shell-script] Calculo com horarios

Bom dia pessoal

Como poderia calcular o valor de subtração, adição de dois horarios ???

      Ex:           12:10 - 11:20 = 00:50 


Obrigado. 

      Ps: ja tentei varias alternativas mas não obtive sucesso em nada...

Yahoo! Groups Sponsor




 




---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem 
prévio aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------


Seu uso do Yahoo! Grupos é sujeito aos Termos do Serviço Yahoo!. 



[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]