Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.912 ]
Download calctime2.sh (versão 2)
Este script calcula em segundos a diferença entre duas datas/horários. Considera mudança de ano, meses, ano bissexto... tudo! E ainda possui um modo interativo onde você o chama passando um parâmetro e ele chama outra rotina passando o resultado e os demais parâmetros que você informar.
Testado em Debian e Open Solaris.
Versão 2 - Enviado por DAVISON MARCEL PASQUALINI em 08/01/2010
Changelog: Se o seu sistema operacional possui a opção %s (para saber digite: date +%s), o script pode ser bem mais simples ... segue a versão 2.
#/bin/sh
# ROTINA DE VARIACAO DE SEGUNDOS ENTRE DUAS DATAS
# Codigo pertence a Comunidade
# VOL (Viva o Linux)
#-------------------------------------------------------
# Primeira versao: Davison Pasqualini
# 30/12/2009 fdmarp
#-------------------------------------------------------
# OPCOES
#-------------------------
INTERATIVO="n" # n - mostra a variacao de data
# s - chama um script de passando o resultado em
# $1 e toda a string passada inicialmente para
# o calctime.sh quando este foi chamado.
SCRIPT_ACT="seu_script.sh" # preencher apenas se for para chamar outro script
#
# =========================================================
mostra_resultado ()
{
MENSAGEM="$resultado_final $guarda_linha"
if [ "$INTERATIVO" = "s" ]; then
sh $SCRIPT_ACT $MENSAGEM
else
echo "resultado: $resultado_final segundos"
fi
}
data_inicial=$1
data_final=$3
hora_inicial=$2
hora_final=$4
dia1=`echo $data_inicial | cut -d"/" -f1`
mes1=`echo $data_inicial | cut -d"/" -f2`
ano1=`echo $data_inicial | cut -d"/" -f3`
dia2=`echo $data_final | cut -d"/" -f1`
mes2=`echo $data_final | cut -d"/" -f2`
ano2=`echo $data_final | cut -d"/" -f3`
hora1=`echo $hora_inicial | cut -d":" -f1`
min1=`echo $hora_inicial | cut -d":" -f2`
seg1=`echo $hora_inicial | cut -d":" -f3`
hora2=`echo $hora_final | cut -d":" -f1`
min2=`echo $hora_final | cut -d":" -f2`
seg2=`echo $hora_final | cut -d":" -f3`
guarda_linha=`echo $* | cut -d" " -f5-`
verifica_bissexto ()
{
verif1=`echo scale=3\;$ano_val/4 |bc | cut -d. -f2`
if [ "$verif1" -eq 0 ]; then
verifica_bissexto_p2
else
bissexto="0"
fi
}
verifica_bissexto_p2 ()
{
verif2=`echo scale=3\;$ano_val/100 |bc | cut -d. -f2`
if [ "$verif2" -eq 0 ]; then
verifica_bissexto_p3
else
bissexto="1"
fi
}
verifica_bissexto_p3 ()
{
verif3=`echo scale=3\;$ano_val/400 |bc | cut -d. -f2`
if [ "$verif3" -eq 0 ]; then
bissexto="1"
else
bissexto="0"
fi
}
verifica_bissexto_p4 ()
{
ano_val=`expr $ano_fim + 1`
verifica_bissexto
if [ "$bissexto" -eq 0 ]; then
dias_count=`expr $dias_count + 28`
else
dias_count=`expr $dias_count + 29`
fi
}
varia_ano ()
{
dias_count=0
ano_val=$ano1
while [ "$ano_val" -le "$ano_fim" ];
do
verifica_bissexto
if [ "$bissexto" -eq 0 ]; then
dias_count=`expr $dias_count + 365`
else
dias_count=`expr $dias_count + 366`
fi
ano_val=`expr $ano_val + 1`
done
varia_mes
}
varia_mes ()
{
mes_val=1
while [ "$mes_val" -le "$mes_fim" ];
do
case "$mes_val" in
"1" | "3" | "5" | "7" | "8" | "10" | "12" )
dias_count=`expr $dias_count + 31`
;;
"01" | "03" | "05" | "07" | "08" )
dias_count=`expr $dias_count + 31`
;;
"4" | "04" | "6" | "06" | "9" | "09" | "11" )
dias_count=`expr $dias_count + 30`
;;
"2" | "02" )
verifica_bissexto_p4
;;
* )
rotina_erro
;;
esac
mes_val=`expr $mes_val + 1`
done
varia_dia
}
varia_dia ()
{
varia_hora=0
dias_count=`expr $dia_fim + $dias_count`
varia_dias_data=`expr $dias_count \* 24 \* 60 \* 60`
varia_hora=`echo $hora \* 3600 + $min \* 60 + $seg + $varia_dias_data | bc`
}
principal ()
{
dia_fim=`expr $dia1 - 1`
ano_fim=`expr $ano1 - 1`
mes_fim=`expr $mes1 - 1`
hora=$hora1
min=$min1
seg=$seg1
varia_ano
res_1=$varia_hora
dia_fim=`expr $dia2 - 1`
ano_fim=`expr $ano2 - 1`
mes_fim=`expr $mes2 - 1`
hora=$hora2
min=$min2
seg=$seg2
varia_ano
res_2=$varia_hora
resultado_final=`expr $res_2 - $res_1`
}
rotina_erro ()
{
clear
echo "
-----------------------------------------------------------------------
calctime.sh
-----------------------------------------------------------------------
NOME
calctime.sh
DESCRICAO
Rotina para calculo de intervalo de tempo.
FORMATO
calctime.sh DD/MM/YYYY HH:MM:SS DD/MM/YYYY HH:MM:SS
------------------- -------------------
data menor data maior
ex.:
calctime.sh 10/01/2000 11:00:00 15/01/2000 09:00:00
OPCOES
INTERATIVO="?" n - mostra a variacao de data
s - chama um script de passando o resultado em
$1 e toda a string passada inicialmente para
o calctime.sh quando este foi chamado.
SCRIPT_ACT="????" nome do script a ser acionado no modo interativo.
Viva o Linux
--------------------------------------------------------------Fim-----"
}
if [ "$4" = "" ]; then
rotina_erro
else
principal
mostra_resultado
fi
#-------------------------------------- FIM --
Criação de pasta com senha no Apache
Monitoramento Serviços por IP e PORTA !
Gerando lista de arquivos mp3 do disco em arquivo de formato HTML
Script contra ataques de Brutal Force por SSH.
Aplicando layer7 sem digitar uma linha de código sequer
Maquina modesta - a vez dos navegadores ferrarem o usuario
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
BigLinux 2026 Wallpapers animado (1)
Warsaw não é reconhecido no Google Chrome 147.0.7727.55 (8)
(CLIPPER) Rodando o mesmo código tanto no Windows quanto no Linux (5)









