Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.599 ]
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 --
slackpigs - veja os pacotes que mais ocupam espaço no Slackware
ddflash - criar mídia bootável do Linux e FreeBSD
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)
Como instalar o Telegram Desktop no Ubuntu 24.04
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
eu preciso saber uma coisa sobre os games no linux (3)
eu preciso saber uma coisa sobre os games no linux (1)
Problema com audio apos upgrade (1)