[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- RES: RES: [shell-script] Calcular Hora,
Julio Cezar Neves - DATAPREVRJ <=