Não há uma data fixa pré-estabelecida para o início e término do Horário de Verão no Brasil. A cada ano essa data é calculada de acordo com o pôr do sol.
O comando a ser utilizado é o 'zic' - ZoneInfo Compiler. Ele vai gerar, a partir de um arquivo de dados, o arquivo binário que o Linux utiliza para saber as datas exatas. Esse arquivo se localiza normalmente em:
/usr/share/zoneinfo/America/Sao_Paulo
Agora nesse diretório, confira se existe um arquivo com mesmo nome, com extensão .zic (Sao_Paulo.zic). Caso exista, basta editá-lo conforme as informações abaixo. Se não existir, tudo bem, basta criar o arquivo em um lugar qualquer como /tmp com seu editor de texto favorito, e adicionar as seguintes linhas:
O comando a ser utilizado é o 'zic' - ZoneInfo Compiler. Ele vai gerar, a partir de um arquivo de dados, o arquivo binário que o Linux utiliza para saber as datas exatas. Esse arquivo se localiza normalmente em:
/usr/share/zoneinfo/America/Sao_Paulo
Agora nesse diretório, confira se existe um arquivo com mesmo nome, com extensão .zic (Sao_Paulo.zic). Caso exista, basta editá-lo conforme as informações abaixo. Se não existir, tudo bem, basta criar o arquivo em um lugar qualquer como /tmp com seu editor de texto favorito, e adicionar as seguintes linhas:
Rule BrazilSP 2004 only - Nov 02 0:00 1:00 S
Rule BrazilSP 2005 only - Feb 20 0:00 0 -
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
Zone America/Sao_Paulo -3:00 BrazilSP BR%sT
Rule BrazilSP 2005 only - Feb 20 0:00 0 -
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
Zone America/Sao_Paulo -3:00 BrazilSP BR%sT
Salve o arquivo como Sao_Paulo.zic e execute o seguinte comando como root:
# zic Sao_Paulo.zic
Feito isso, o arquivo: /usr/share/zoneinfo/America/Sao_Paulo vai ser atualizado com as novas definições de data.
Como último passo, o Linux utiliza o arquivo /etc/localtime para saber qual zona utilizar. Se seu arquivo /etc/localtime for um link simbólico(*1) para /usr/share/zoneinfo/America/Sao_Paulo já está tudo certo.
Caso não seja um link, basta copiar o que você acabou de alterar no lugar do atual. Como root:
# cp /etc/localtime /etc/localtime.backup
# cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
E estará pronto! Basta conferir utilizando o comando date:
$ date
Sun Nov 7 23:06:52 BRT 2004
Note a zona "BRT" em vez de "BRST" (*2)
Artigo escrito por: Wagner Amaral em 21/10/2004 - 12:41
Considerações finais
- Se sua partição /usr não for a mesma do root "/", o arquivo /etc/localtime não deverá ser um link, visto que /usr será montada depois do kernel estar rodando, então o arquivo não será encontrado. Se seu /usr for montado, simplesmente copie o arquivo para /etc/localtime e estará resolvido.
- Para os curiosos:
BRT == BRazilian Time (horário normal)
BRST == BRazilian Saving Time (saving == econômico == horário de verão)
Fonte: http://danielaugusto.com/index.php/tag/linux/
#!/bin/sh
##############################################
# Script para atualizacao do Horario de Verao
##############################################
cp /usr/share/zoneinfo/America/Sao_Paulo /usr/share/zoneinfo/America/Sao_Paulo.`date +%Y`
cp /etc/localtime /etc/localtime.`date +%Y`
mkdir -p /usr/share/zoneinfo/Brazil
echo "Rule Brazil 2010 only - Feb 21 00:00 0 -" > /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2010 only - Oct 17 00:00 1 S" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2011 only - Feb 20 00:00 0 -" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2011 only - Oct 16 00:00 1 S" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2012 only - Feb 19 00:00 0 -" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2012 only - Oct 21 00:00 1 S" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2013 only - Feb 17 00:00 0 -" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2013 only - Oct 20 00:00 1 S" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2014 only - Feb 16 00:00 0 -" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2014 only - Oct 19 00:00 1 S" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2015 only - Feb 22 00:00 0 -" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2015 only - Oct 18 00:00 1 S" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Rule Brazil 2016 only - Feb 21 00:00 0 -" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Zone Brazil/East -3:00 Brazil BR%sT" >> /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Compilando o arquivo zic"
/usr/sbin/zic /usr/share/zoneinfo/Brazil/brasil10a15.zic
echo "Finalizando o processo"
cp /usr/share/zoneinfo/Brazil/East /usr/share/zoneinfo/America/Sao_Paulo
cp /etc/localtime /etc/localtime.bak
rm -f /etc/localtime
cp /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
echo "Aplicacao finalizada com sucesso"
Nenhum comentário:
Postar um comentário