The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > UNIX para Dummies Perguntas & Respostas > Respostas a Perguntas Frequentes > Dicas e Tutoriais
.
google unix.com



Dicas e Tutoriais Helpful artigos de nossos usuários.

LinkBacks (?)
Linkback a este tema: http://www.unix.com/tips-tutorials/31944-simple-date-time-calulation-bash.html
Posted By Para Tipo Data
Fichas sobre yoga_sawant do Delicious Esta discussão Refback 12-25-2008 09:43

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Obter data e hora para o passado 1 hora de data actual spch2o Programação Shell Script e 5 08-29-2008 05:32
Processamento de um arquivo de log baseado em data / hora de entrada ea data / hora no arquivo de log ataviar Programação Shell Script e 4 03-16-2008 11:23
uma maneira simples de converter uma data em segundos ao normal data travian HP-UX 2 11-23-2006 12:25
simples script bash para ftp? satnamx Programação Shell Script e 1 04-21-2006 12:18
Simples script BASH xaphalanx Programação Shell Script e 3 12-21-2005 03:54

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback (1) Thread Tools Pesquisar este Thread Avaliação: Thread Rating: 1 votes, 4.00 average. Display Modes
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 10-08-2006
ripat ripat is offline Forum Advisor  
Usuário
  
 

Join Date: Oct 2006
Localização: Bélgica
Lugares: 441
Simples calulation data e hora em BASH

O GNU data comando integral de goodies, mas não quando se trata de calcular uma data ou hora diferença. Aqui está o que veio depois a olhar para mais de uma solução.

Código deve ser auto-explicativa.


Código:
#!/bin/bash

date2stamp () {
    date --utc --date "$1" +%s
}

stamp2date (){
    date --utc --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}

dateDiff (){
    case $1 in
        -s)   sec=1;      shift;;
        -m)   sec=60;     shift;;
        -h)   sec=3600;   shift;;
        -d)   sec=86400;  shift;;
        *)    sec=86400;;
    esac
    dte1=$(date2stamp $1)
    dte2=$(date2stamp $2)
    diffSec=$((dte2-dte1))
    if ((diffSec < 0)); then abs=-1; else abs=1; fi
    echo $((diffSec/sec*abs))
}

# USAGE # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

# convert a date into a UNIX timestamp
    stamp=$(date2stamp "2006-10-01 15:00")
    echo $stamp

# from timestamp to date
    stamp2date $stamp

# calculate the number of days between 2 dates
    # -s in sec. | -m in min. | -h in hours  | -d in days (default)
    dateDiff -s "2006-10-01" "2006-10-32"
    dateDiff -m "2006-10-01" "2006-10-32"
    dateDiff -h "2006-10-01" "2006-10-32"
    dateDiff -d "2006-10-01" "2006-10-32"
    dateDiff  "2006-10-01" "2006-10-32"

# number of seconds between two times
    dateDiff -s "17:55" "23:15:07"
    dateDiff -m "17:55" "23:15:07"
    dateDiff -h "17:55" "23:15:07"

# number of minutes from now until the end of the year
    dateDiff -m "now" "2006-12-31 24:00:00 CEST"

# Other standard goodies from GNU date not too well documented in the man pages
    # assign a value to the variable dte for the examples below
    dte="2006-10-01 06:55:55"
    echo $dte

    # add 2 days, one hour and 5 sec to any date
    date --date "$dte  2 days 1 hour 5 sec"

    # substract from any date
    date --date "$dte 3 days 5 hours 10 sec ago"
    date --date "$dte -3 days -5 hours -10 sec"

    # or any mix of +/-. What will be the date in 3 months less 5 days
    date --date "now +3 months -5 days"

    # time conversions into ISO-8601 format (RFC-3339 internet recommended format)
    date --date "sun oct 1 5:45:02PM" +%FT%T%z
    date --iso-8601=seconds --date "sun oct 1 5:45:02PM"
    date --iso-8601=minutes

    # time conversions into RFC-822 format
    date --rfc-822 --date "sun oct 1 5:45:02PM"

Aviso: o formato não-padrão % s podem não funcionar em todas as versão de data. Funciona bem do meu GNU data 5.2.1

Última edição por ripat; em 10/09/2006 11:57.. Motivo: Adicionado algumas opções para a função DateDiff
 

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 10:32.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0