[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]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [shell-script] Calculo com horarios,
Everton Aparecido Onofre <=