shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Horário de verão


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Horário de verão
Date: Tue, 16 Sep 2008 21:48:36 -0300

2008/9/16 Flavio Junior <address@hidden>:
> Da uma olhada nisso..
> Não testei mto mas parece funcionar bem, ou mais facil de melhorar.
>
> # awk '/^Su/{print $4}' <(LC_ALL=C ncal 02 2009)
> 15
> # awk '/^Su/{print $4}' <(LC_ALL=C ncal 10 2008)
> 19
>
>
> (O LC_ALL=C é pra garantir que não vai ser "Domingo" invés de "Sunday").
>
> --
>
> Flávio do Carmo Júnior aka waKKu
>
> 2008/9/16 Fabiano Caixeta Duarte <address@hidden>:
>> Senhores,
>>
>> Levando em consideração que o nosso horário de verão passou de
>> variável a parametrizável
>> (http://www.mme.gov.br/site/news/detail.do?newsId=16838&currentArea=),
>> imagino que surgirão alternativas para atualização automática.
>>
>> Conforme decreto, o horário de verão se inicia no terceiro domingo de
>> outubro e termina no terceiro domingo de fevereiro do ano subsequente
>>
>> Pra quem não usa alternativas como tzdata ou similares, segue um
>> script que deve funcionar se executado entre março e setembro.
>>
>> Eu na verdade não gostei muito da função terceiroDomingo e aceito
>> sugestões de melhoria.
>>
>> Abraço a todos.
>>
>> #!/bin/bash
>> # Sugestão: executar via crontab a cada dia 1º de outubro
>>
>> ----------------------------------------------------------
>> TMP=$(mktemp -p /tmp verao.XXXXXX)
>>
>> ANO_INI=$(date +%Y)
>> ANO_FIM=$((ANO_INI+1))
>>
>> function terceiroDomingo() {
>> # $1: mês
>> # $2: ano
>> cal $1 $2 | sed 1,2d | awk 'NF == 7 {print}' | sed '3!d' | cut -d" " -f1
>> }
>>
>> DIA_INI=$(terceiroDomingo 10 $ANO_INI)
>> DIA_FIM=$(terceiroDomingo 02 $ANO_FIM)
>>
>> cat << EOF >> $TMP
>> Rule Brazil $ANO_INI only - Oct $DIA_INI 00:00 1 S
>> Rule Brazil $ANO_FIM only - Feb $DIA_FIM 00:00 0 -
>>
>> Zone Brazil/East -3:00 Brazil BR%sT
>> EOF
>>
>> zic $TMP
>>
>> rm $TMP
>> ----------------------------------------------------------
>>
>> --
>> Fabiano Caixeta Duarte
>> Especialista em Redes de Computadores
>> Linux User #195299
>> Ribeirão Preto - SP
>>
>>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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
>
>
>

Interessante? Muito. O problema o ncal (que eu nem conhecia) não está
disponível por padrão em qualquer SO/distro.

No meu FreeBSD, tem. No slack, não.

Mas nem tudo está perdido.

Observei que por padrão, no ncal a semana começa na segunda. O mesmo
pode ser obtido com o parâmetro -m do cal.

Problema resolvido pra quem não tem ncal.

awk 'NR == 5{print $7}' <(cal -m 10 2008)

Obrigado!

-- 
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


reply via email to

[Prev in Thread] Current Thread [Next in Thread]