Cálculo de intervalo de tempo
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 09/01/2010)
[ Hits: 19.290 ]
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 --
ZVideo1.1 - Conversor de formatos de vídeo para divX
Postfix - Listar usuários com over quota
Cadastro Regras de Controle de Banda - CBQ
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (4)