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 problema é que nosso sistema não vai adivinhar isso. Esse artigo mostra como gerar um arquivo de zonas personalizado para seu sistema.
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. Em 2004 o horário de verão vai
começou oficialmente no dia 02 de Novembro e terminará no dia
20 de Fevereiro de 2005.
O problema é que nosso sistema não vai adivinhar isso e
provavelmente utilizar a data do ano passado (19 de Outubro a
15 de Fevereiro), portanto da data em que foi escrito esse
artigo, muitos sistemas já deverão estar com a data errada.
Felizmente é fácil se definir isso no Linux. ;)
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
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:
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)
[3] Comentário enviado por fernandofat em 09/11/2004 - 04:29h
A nível de cultura....
Para configurar o início e o fim do horário de verão no Windows utilize um programa chamado "tzedit.exe", ele é fornecido com o Resource Kit do Windows.
[6] Comentário enviado por renato_pacheco em 14/10/2011 - 10:37h
Boa! Tive q modificar isso em um sistema Slack antigo (q tava pegando o horário d verão errado). Bastou criar um arquivo com o zic q tudo voltou ao normal.