Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.501 ]
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 --
Gerando HTML de status de HD e coneccao de internet
Script para correção de arquivos Makefile usando comando patch
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - ENVIA MSG CASO O USUÁRIO PASSE 90% DA SUA QUOTA
Interface de Controle para o SCDBACKUP.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Quebra de linha na data e hora no Linux Mint
Organizando seus PDF com o Zotero
DEBIAN - PROBLEMA COM REDIRECIONAME... DE DOMINIO NA REDE INTERNA (1)
Sempre que vou baixar algum pacote acontece o erro dpkg (7)
como instalo panfrost-dri e o driver panfrost fork , ou panfrost (12)