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

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

RES: RES: [shell-script] Calcular Hora


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: RES: [shell-script] Calcular Hora
Date: Wed, 29 Sep 2004 09:16:49 -0300

Olá Miguel,
os progs que vc falou devem ser o dton.sh e o ntod.sh, que funcionam
exatamente no mesmo conceito dos progs para horário que descrevi abaixo. Aí
vão eles:

Prompt> cat dton.sh
#!/bin/ksh
#
#======================================================================
# Calcula qtd dias entre uma data passada como parametro e 01/01/1980.
# Se nao for passado nenhum parametro a data de hoje sera assumida.
# Obs. Para executar este programa sob o sh, trocar os $((..)) por expr
#======================================================================
# Leia: Linux - Programacao Shell  ISBN: 85-7452-048-9
# Autor: Julio Cezar Neves <mailto:address@hidden>
#======================================================================
#
if  [ $1 ]
then
        DFim=`echo $1 | cut -f1 -d"/"`
        MFim=`echo $1 | cut -f2 -d"/"`
        AFim=`echo $1 | cut -f3 -d"/"`
else
        DFim=`date +%d`
        MFim=`date +%m`
        AFim=`date +%Y`
fi

TotDias=$((1 + 365 * (AFim - 1980) + (AFim - 1980) / 4))
[ $((AFim % 4)) = 0 -a $MFim -le 2 ] && TotDias=$((TotDias - 1))

for i in `echo " 31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-$MFim -d" "`
do
         TotDias=$((TotDias + $i))
done
echo $((TotDias + DFim))

Prompt> cat ntod.sh
#!/bin/ksh
#
#==========================================================
# Recebe uma qtd de dias como parametro, e o transforma em
# uma data, que significa 1/1/1980 + parametro recebido.
# Obs. Para executar este programa sob o sh, trocar por
# $((..)) por expr
#==========================================================
# Leia: Linux - Programacao Shell  ISBN: 85-7452-048-9
# Autor: Julio Cezar Neves <mailto:address@hidden>
#==========================================================
#
Num=$(($1 - 1))
AFim=$((1980 + (Num / 365)))
DFim=$((Num % 365 - Num / 1460))
[ $((AFim % 4)) -eq 0 ] && DFim=$((DFim + 1))
MFim=1
for i in 31 `[ $((AFim % 4)) -eq 0 ] && echo 29 || echo 28` 31 30 31 30 31
31 30 31 30 31
do
        [ $DFim -le $i ] && break
        DFim=$((DFim - i))
        MFim=$((MFim + 1))
done
[ $DFim -eq 0 ] && DFim=$i
[ $DFim -le 9 ] && echo -n "0$DFim/" || echo -n "$DFim/"
[ $MFim -le 9 ] && echo -n "0$MFim/" || echo -n "$MFim/"
echo $AFim

Tive um bug no meu CVS e não tenho certeza se essas são as versões corretas.
Se houver erro, por favor me reportem.

Em tempo: desculpem pelo comercial. ;)

[ ]s,
Julio Cezar Neves
- Gerente do Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden


| -----Mensagem original-----
| De: Miguel da Silva [mailto:address@hidden]
| Enviada em: terça-feira, 28 de setembro de 2004 14:16
| Para: address@hidden
| Assunto: Re: RES: [shell-script] Calcular Hora
| 
| 
| Uma vez me encontrei com um problema relacionado com datas: 
| calcular diferenças de datas e coisas do tipo; uma das 
| soluções que encontrei era um programa que fazia exatamente 
| isso que o Júlio Cézar falou, mas trabalhando com datas, ou 
| seja: mudando datas para números e vice-versa. Esse método 
| parece bem interessante quando a idéia é lidar com medidas 
| que não estão no sistema decimal.
| 
| Até mais, Miguel D.
| 
| *********** SEPARADOR DE RESPOSTA  ***********
| 
| On 28/09/2004 at 01:01 p.m. Julio Cezar Neves - DATAPREVRJ wrote:
| 
| >Aê Pessoal,
| >2 progs: hton.sh passa horário para numero e ntoh.sh faz o 
| inverso. Então
| >para subtrair 2 horários, use hton.sh nos dois e subtaia os 
| números. Para
| >somar horas ou minutos use o hton.sh some e em seguida use o ntoh.sh.
| >
| >Prompt> cat hton.sh
| >#!/bin/sh
| >#
| ># Sintaxe: dton.sh [hh:mm:ss | hh mm ss ]
| ># Recebe um horario e transforma-o na qtd de segundos a 
| partir de 00:00:00
| ># Caso este horario nao seja informado, a hora atual serah usada como
| >default
| >#
| >if  echo "$*" | egrep
| >"^(0?[0-9]|1[0-9]|2[0-3]):((0?|[1-5])[0-9]):((0?|[1-5])[0-9])
| " > /dev/null
| >then
| >    hh=`echo $1 | cut -f1 -d:`
| >    mm=`echo $1 | cut -f2 -d:`
| >    ss=`echo $1 | cut -f3 -d:`
| >elif  echo "$*" | egrep "^(0?[0-9]|1[0-9]|2[0-3]) ((0?|[1-5])[0-9])
| >((0?|[1-5])[0-9])" > /dev/null
| >then
| >    hh=$1
| >    mm=$2
| >    ss=$3
| >elif [ $# -eq 0 ]
| >then
| >    hh=`date "+%H"`
| >    mm=`date "+%M"`
| >    ss=`date "+%S"`
| >else
| >    echo "
| >         Uso: $0  [hh:mm:ss|hh mm ss].  Caso  nao seja informado
| >              parametro, o horario atual sera usado como default.
| >" > /dev/tty
| >    exit 1
| >fi
| >echo `expr $hh \* 3600 + $mm \* 60 + $ss`
| >
| >Prompt> cat ntoh.sh
| >#!/bin/sh
| >#
| ># Uso: ntoh.sh num (num = qtd de segundo a partir de 00:00:00)
| >#
| ># Recebe um numero e transforma-o em  um  horario  no  formato
| ># [d] hh:mm:ss,  indicando  quanto tempo passou  a  partir  de
| ># 00:00:00. Se hora > 24, d receberah a qtd de dias excedentes
| >#
| >if  [ $# -ne 1 ]
| >then
| >    echo "
| >      Uso: $0 num (num = qtd de segundo a partir de 00:00:00)
| >" > /dev/tty
| >    exit 1
| >fi
| >
| >hh=`expr $1 / 3600`
| >if  [ $hh -gt 24 ]
| >then
| >    a=`expr $hh / 24`
| >    b=`expr $hh % 24`
| >    [ $b -lt 10 ] && b=0$b
| >    hh="$a $b"
| >else
| >    [ $hh -lt 10 ] && hh=0$hh
| >fi
| >mm=`expr \( $1 % 3600 \) / 60`
| >ss=`expr $1 % 60`
| >str=$hh:
| >for i in $mm $ss
| >do
| >    [ $i -lt 10 ] && i=0$i
| >    str=$str$i:
| >done
| >
| >echo $str | cut -f-3 -d:
| >
| >[ ]s,
| >Julio Cezar Neves
| >- Gerente do Programa de Software Livre -
| >Tel:+55 21 2528-7070 / +55 21 8112-9988
| >Fax: +55 21 2528-7646
| >mailto:address@hidden
| >
| >
| >| -----Mensagem original-----
| >| De: linko_k [mailto:address@hidden]
| >| Enviada em: terça-feira, 28 de setembro de 2004 11:28
| >| Para: address@hidden
| >| Assunto: [shell-script] Calcular Hora
| >| 
| >| 
| >| Bom Dia,
| >| 
| >|  Gostaria de saber como eu faço para clacular hora, exemplo:
| >| 
| >|  - um processo começou as 13:59 e terminou as 17:39, como eu faço o
| >|  calculo para saber o tempo que durou este processo ?
| >| 
| >|  - outro exemplo: começou as 23:14 e terminou as 03:48
| >| 
| >| 
| >| 
| >|  Obrigado,
| >|  Linko
| >| 
| >| 
| >| 
| >| 
| >| 
| ---------------------------------------------------------------------
| >| 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.listas-discussao.cjb.net
| >---------------------------------------------------------------------
| > 
| >Links do Yahoo! Grupos
| >
| >
| >
| >
| > 
| > 
| >
| >
| >---------------------------------------------------------------------
| >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.listas-discussao.cjb.net
| >---------------------------------------------------------------------
| > 
| >Links do Yahoo! Grupos
| >
| >
| >
| 
| 
| 
| 
| 
| ---------------------------------------------------------------------
| 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.listas-discussao.cjb.net
---------------------------------------------------------------------
 
Links do Yahoo! Grupos




 
 


reply via email to

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