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

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

RES: [shell-script] como subtrair datas


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] como subtrair datas
Date: Wed, 29 Jan 2003 09:06:03 -0300

Frederico,
eu uso 2 scrips que me permitem fazer praticamente tudo com datas. Um deles
(dton.sh) converte a data para um sequencial a partir de 01/01/80, o outro
(ntod.sh), é o inverso, isto é converte um número que seria a qtd de dias
decorridos a partir de 01/01/80. Desta maneira, para subtrair 2 datas, use o
dton.sh nas 2 e subtraia os valores. Para saber que data será daqui a 87
dias, use o dton.sh na data de hoje (default), some 87 e neste resultado use
o ntod.sh. Abaixo a listagem dos 2.

[ ]s,
Julio Cezar Neves
- Eu apoio o Software Livre -

Obs - 1 - Se alguém desejar, me peça em pvt após 07/02 (até 07/02 é
impossível) que mando os arquivos atachados.
2 - Para executar o ntod.sh sob o bash, substituir:
[ $DFim -le 9 ] && echo "0$DFim/\c" || echo "$DFim/\c"
[ $MFim -le 9 ] && echo "0$MFim/\c" || echo "$MFim/\c"
por:
[ $DFim -le 9 ] && echo -e "0$DFim/\c" || echo -e "$DFim/\c"
[ $MFim -le 9 ] && echo -e "0$MFim/\c" || echo -e "$MFim/\c"

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

[ $MFim -ne 1 ] &&
for i in `echo "31 28 31 30 31 30 31 31 30 31 30 31" | cut -f-$((MFim - 1))
-d" " 2> /dev/null`
do
        TotDias=$((TotDias + $i))
done
echo $((TotDias + DFim))


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 3
1
do
        [ $DFim -le $i ] && break
        DFim=$((DFim - i))
        MFim=$((MFim + 1))
done
[ $DFim -eq 0 ] && DFim=$i
[ $DFim -le 9 ] && echo "0$DFim/\c" || echo "$DFim/\c"
[ $MFim -le 9 ] && echo "0$MFim/\c" || echo "$MFim/\c"
echo $AFim


-----Mensagem original-----
De: Frederico Argolo [mailto:address@hidden]
Enviada em: terça-feira, 28 de janeiro de 2003 20:13
Para: address@hidden
Assunto: [shell-script] como subtrair datas



Aproveitando assunto de datas, 
como faco para subtrair 2 datas???
Por exemplo, quero saber a diferenca em dias do dia
01/02/2003 para 25/12/2002

_______________________________________________________________________
Busca Yahoo!
O serviço de busca mais completo da Internet. O que você pensar o Yahoo!
encontra.
http://br.busca.yahoo.com/


---------------------------------------------------------------------
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 às regras descritas em:
http://br.yahoo.com/info/utos.html 



reply via email to

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