[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] date
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] date |
Date: |
Mon, 12 Jun 2006 10:27:11 -0300 |
vamos por membros esvicerados:
Vc tem uma data no formato: DD/MM/YYYY HH:MI:SS
Vc quer saber:
a) se esta data é um fim de semana e
b) se está dentro (ou fora) do intervalo 6:30-18:30
optei por usar awk que é o que eu mais conheço. a primeira coisa que
eu precisa saber era se a data era um fim de semana. pesquisando
descobri a função
strftime("formato", data-hora)
esta função retorna a data-hora em um formato que eu defino. descobri
que, se usar %a, eu tenho o dia da semana com tres caracteres. Ora,
pra saber se é sabado ou domingo agora é uma barbada!
entretanto esta data-hora não é no formato que vc informa. eu preciso
criar uma usando o mktime() e os seus parametros. vc informa
DD/MM/YYYY HH:MI:SS e o mktime requer
YYYY/MM/DD HH:MI:SS, então criou-se uma polêmica.
se eu informar ao awk que o separador de campo é espaço, ':' e '/'
(pus um tab também, vai que tenha em algum lugar) e ler a sua string,
eu consigo converter fazendo
date=$3" "$2" "$1" "$4" "$5" "$6
Agora vem o pulo do gato!
weekday=strftime("%a",mktime(date))
if(weekday == "Sun" || weekday == "Sat"){
# a data informada eh um fim de semana!
}
Agora vem a parte "dificil". como saber se a hora esta dentro (ou
fora) do intervalo que vc deseja. Uma forma ao meu ver simples é
converter a hora em segundos desde a meia noite. assim se eu quero
saber se a hora x:y:z esta entre 6:30:00 e 18:30:00 eu faço
sec_day = x * 60 * 60 + y * 60 + z
sec_up = 6 * 60 * 60 + 30 * 60 + 0
sec_down = 18 * 60 * 60 + 30 * 60 + 0
fariamos um teste assim:
if((sec_day < sec_up)||(sec_day > sec_down)){
# se o numero de segundos for menor que a hora mais 'cedo' (chamei de
sec_up por
#alguma loucura da minha cabeça) OU for maior que a hora mais 'tarde'
(idem, sec_down)
#a hora informada esta fora do periodo
} else {
# esta dentrio do periodo
}
como as contas de 'hora' sao repetitivas, criei uma função que converte.
Espero que atenda às suas necessidades.
Em 12/06/06, rafael.nery<address@hidden> escreveu:
Tiago Barcellos Peczenyj,
Agora fiquei confuso no que vc fez...
Ficou muito complexo.
#!/bin/bash
# le uma data no formato DD/MM/YYYY HH:MI:SS
# caso o dia seja um fim de semana : sab/dom
# e esteja fora da faixa 6:30:00 a 18:30:00
# imprime algo
echo "$@" | awk -F"[ \t:/]" '
function seconds(h,m,s){ # retorna o numero de segundos dessa hora !
return 60*(60*h + m)+s;
}
{
date=$3" "$2" "$1" "$4" "$5" "$6
weekday=strftime("%a",mktime(date))
sec_day = seconds($4,$5,$6)
sec_down = seconds(18,30,00)
sec_up = seconds( 6,30,00)
if(weekday == "Sun" || weekday == "Sat"){
#print "final de semana"
if((sec_day < sec_up)||(sec_day > sec_down)){
# acho que eh isso que vc quer, senao eh so
alterar o if!
print "fora do horario"
}
}
}'
Em 09/06/06, rafael.nery<address@hidden> escreveu:
> Pessoal,
> A variavel DATE, uma data no formato:
> DD/MM/YYYY HH:MI:SS.
> Como posso fazer um script para verificar se ela está entre 18:30 e 6:30 e se
o dia não é final de semana.
> Estou tentando algo do tipo:
> #!/bin/bash
> horaAtual="date"
> hora1="18:30"
> hora2="06:30"
> data="date +%a"
> if [ "$horaAtual" -ge "$hora1" -a "$horaAtual" -le "$hora2" -a
> then
> echo "nao"
> exit1
> #else "sim"
> fi
>
> Mas nào está funcionando e falta tb o dia.
> Alguém me ajuda?
> Obrigado,
> Rafael.
>
>
>
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
--
Tiago B Peczenyj
Linux User #405772
# cd /pub
# more beer
- date, rafael.nery, 2006/06/09
- date, rafael.nery, 2006/06/12
- Re: [shell-script] date,
Tiago Barcellos Peczenyj <=