Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.761 ]
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 --
Download do Banco de dados NCBI NT (DNA)
Script para balanceamento de link's de internet
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Como fazer a instalação do Samba
Como fazer a conversão binária e aplicar as restrições no Linux
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (19)
Formas seguras de instalar Debian Sid (13)
Malware encontrado em extensões do Firefox. (0)
Fiz uma pergunta no fórum mas não consigo localizar [RESOLVIDO] (21)









