Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.431 ]
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 --
Limpar o cache da memória RAM apenas quando necessário
Sincronizar arquivos com rsync
Executando comandos remotos usando sshpass
Verificar conexão com Internet
Restaurar backup de uma conta cpanel mesmo que ela já exista
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Dock do debian está muito pequena (1)
Instalei Windows 11 e não alterou o Grub do Debian (0)
Linux Mint (21.2) não reconhece teclado mecanico RASEC da PCYES (2)