My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# ----------------------------------------------------------------------------
# Mostra as datas de início e fim do horário de verão.
# Obs.: Ano de 2008 em diante. Se o ano não for informado, usa o atual.
# Regra: 3º domingo de outubro/fevereiro, exceto carnaval (4º domingo).
# Uso: zzhorariodeverao [ano]
# Ex.: zzhorariodeverao
# zzhorariodeverao 2009
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2008-10-24
# Licença: GPL
# Requisitos: zzcarnaval zzdata zzdiadasemana
# Tags: data
# ----------------------------------------------------------------------------
zzhorariodeverao ()
{
zzzz -h horariodeverao "$1" && return

local inicio fim data domingo_carnaval
local dias_3a_semana="15 16 17 18 19 20 21"
local ano="$1"

# Se o ano não for informado, usa o atual
test -z "$ano" && ano=$(date +%Y)

# Validação
zztool -e testa_ano "$ano" || return 1

# Só de 2008 em diante...
if test "$ano" -lt 2008
then
echo 'Antes de 2008 não havia regra fixa para o horário de verão'
return 1
fi

# Encontra os dias de início e término do horário de verão.
# Sei que o algoritmo não é eficiente, mas é simples de entender.
#
for dia in $dias_3a_semana
do
data="$dia/10/$ano"
test $(zzdiadasemana $data) = 'domingo' && inicio="$data"

data="$dia/02/$((ano+1))"
test $(zzdiadasemana $data) = 'domingo' && fim="$data"
done

# Exceção à regra: Se o domingo de término do horário de verão
# coincidir com o Carnaval, adia o término para o próximo domingo.
#
domingo_carnaval=$(zzdata $(zzcarnaval $((ano+1)) ) - 2)
test "$fim" = "$domingo_carnaval" && fim=$(zzdata $fim + 7)

# Datas calculadas, basta mostrar o resultado
echo "$inicio"
echo "$fim"
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r709 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: aspas ao redor de
variáveis.
r655 by aureliojargas on Mar 23, 2012   Diff
s/Aurélio/Aurelio/ *
r504 by aureliojargas on May 21, 2011   Diff
Campo novo no cabeçalho: Tags. Ainda
presente em poucas funções, a ideia é
marcar todas e depois usar esta
informação no site.
All revisions of this file

File info

Size: 1724 bytes, 57 lines
Powered by Google Project Hosting