FreeBSD
 
 
Horário de Verão
(daylight saving)

Ao entrar no horário de verão deve-se adiantar 1 hora no relógio. Isso deve ser feito às 00:00:00hs, passando o relógio para 01:00:00hs. Ao sair do horário de verão deve-se atrasar em 1 hora o relógio. Isso deve ser feito às 23:59:59hs, passando o relógio para 22:59:59hs. Perceba que esses horários não foram escolhidos aleatóriamento, pois a intenção deles é não alterar a data.

Um ponto bastante confuso é a relação entre o Horário de Verão e NTP Server (Servidor de Hora). Esses dois têm enfoques diferentes. O Horário de Verão é um período de tempo que determinadas regiões do mundo devem atrasar ou adiantar a hora de acordo com datas pré-estabelecidas ou datas variáveis. O horário de verão está relacionado diretamente ao TimeZone (fuso horário) onde o DF é 3 horas (UTC-3) a menos do que a hora do Meridiano de Greenwich (UTC-0 | hora de referencia | marco zero). Exemplificando, se no Meridiano de Greenwich for 13:00hs, o DF estará será 10:00hs. Quando o Horário de Verão entrar em vigor, o DF fica com 2 horas (UTC-2) a menos, ou seja, se no Meridiano de Greenwich for 13:00hs, o DF será 11:00hs.

Já o NTP Server tem a função de sincronizar a hora, ou seja, de fornecer a hora certas à clientes/estações (com acurácia). Só que essa hora que é sincronizada é a hora universal (de referência - do Meridiano de Greenwich – marco zero). O que faz uma região ter a hora diferente uma da outra é o TimeZone (fuso horário). Em outras palavras, o NTP Server repassar aos cliente a hora universal que é uma hora de referência e não a hora do sistema operacional (hora universal com o TimeZone). Por isso que um NTP Server pode estar em vários lugares do mundo e com horas diferenciadas dos clientes (dependendo do timezone - fuso horário) que mesmo assim esses clientes ficarão com a hora certa, independente se o NTP Server estará nos USA/Índia/Japão e os clientes estarem no Brasil/China/África.

Com esses pontos levantados, é importante ressaltar que possuir um NTP Server não garante que todos os computadores do MMA estarão preparados para o horário de verão, pois horário de versão é um período do ano que o TimeZone é mudado..

Para resolver a questão do horário de verão é necessário fazer a configuração em todas as estações e servidores da seguinte forma: em máquinas MS-Windows é necessário que sistema operacional esteja atualizado ou instalar um pacote (hotfix) específico para isso. Já em máquinas Unix-Like (GNU/Linux, FreeBSD etc) tem que instalar um pacote em específico (no Debian antigamente tinha um pacote chamado tz-brazil para acertar o horário de verão) ou configurar o sistema operacional (zic, zdump e /etc/localtime)..

Para respaldar o que lhe exposto sobre as diferenças entre Sincronização de Hora (NTP Server) e Horário de Verão, segue o link a seguir (da própria Ntp.br):

Ntp.BR - Horário de Verão
MS-Microsoft - Horário de Verão
ANEEL - Informacoes Técnicas - Horário de Verão
Hora Legal Brasileira
Decreto no. 6.558 de 8 de setembro de 2008 - Institui a hora de verão em parte do território nacional

O decreto no. 6.558 de 8 de setembro de 2008 determinou datas fixas de início e encerramento do período de Horário de Verão. O início sempre será à zero hora do terceiro domingo de Outubro e o encerramento sempre à zero hora do terceiro domingo de Fereveiro do ano seguinte. Se o terceiro domingo de Fevereiro for um domingo de Carnaval então o encerramento é automaticamente transferido para zero hora do domingo seguinte.

Ao entrar no Horário de Verão é preciso adiantar os relógios em 1 hora nos estados da regiao Sul, Sudeste e Centro-Oeste que participam do Horário de Verão (Rio Grande do Sul, Santa Catarina, Paraná, São Paulo, Rio de Janeiro, Espírito Santo, Minas Gerais, Goiás, Mato Grosso, Mato Grosso do Sul e Distrito Federal.

Lembramos a todos que, tratando-se de incidentes de segurança, a precisão dos relógios dos sistemas é fundamental para manter a consistência dos logs, além de ser imprescindível nas investigações e identificação de responsáveis. Lembramos ainda que os logs reportados durante a vigência do Horário de Verão estarão no timezone UTC-0200 (GMT-2).

O horário de verão tem relação com o timezone (fuso horário) configurado no sistema. Ao alterar o timezone altera-se o parâmetro do sistema que determina a diferença em horas entre o horário absoluto (UTC / GMT 0) e o horário local. Se o relógio do sistema (horário absoluto) marca 16:00:00 UTC, ajustado por NTP, temos:

A seguir mostrei 2 maneiras de configurar o horário de verão. A primeira é a tradicional, mais trabalhosa e restrita ao ano em especifico. A segunda é não tradicional, mais simples e completa. Então vamos lá:







Primeira Maneira
(tradicional, mais trabalhosa e restrita ao ano em especifico)



Verificar se o horário de verão está correto
# date -v21d -v10m -v0H -v0M -v0S (mostra a hora do dia 21/10 às 00:00:00hs. Essa data e hora escolhida deve ser do dia da mudança do horário de verão. Se aparecer "01:00:00" é porque o horário de verão está correto para aquela data. Se aparecer "00:00:00" é porque o horário de verão não está correto para aquela data)


Backup dos arquivos de TimeZone
# cp -pi /etc/localtime /var/backups/
# cp -pi /usr/share/zoneinfo/Brazil/East /var/backups/
# cp -pi /usr/share/zoneinfo/America/Sao_Paulo /var/backups/


Verificar o Horário de Verão (Ano, Mês, Dia e Hora)
# zdump -v /etc/localtime | grep -E '(2012|2013)' (o "/etc/localtime" contém entre outras coisas o Ano, Mês, Dia do horário de verão deste servidor. Esse é o arquivo que define o dia que o horário de verão entra e sai. Também, esse é um arquivo de dados que contém a "hora local/atual" calculado em cima do TimeZone atual do sistema operacional. Na verdade ele é um link simbólico ou um cópia de um dos arquivos que ficam em "/usr/share/zoneinfo/")
# zdump -v America/Sao_Paulo | grep -E '(2012|2013)' (entre outras coisas o Ano, Mês, Dia do horário de verão do sistema operaciona que tem o TimeZone como "America/Sao_Paulo")
# zdump -v /usr/share/zoneinfo/America/Sao_Paulo | grep -E '(2012|2013)' (idem)
# zdump -v /usr/share/zoneinfo/Brazil/East | grep -E '(2012|2013)' (idem. só que para "Brazil/East")


Arquivo de configuração
vi /etc/daylight_savings.sic (arquivo que definirá o horário de verão)
Rule Brazil 2012 only - Oct 21 00:00 1 S
Rule Brazil 2013 only - Feb 17 00:00 0 -
Zone Brazil/East -3:00 Brazil BR%sT


Mudar o horário de verão
# zic /etc/daylight_savings.sic (envia o horário de verão configurado anteriormente para "/usr/share/zoneinfo/Brazil/East")
# zic -l Brazil/East (faz um "link" do "/usr/share/zoneinfo/Brazil/East" para "/etc/localtime")








Segunda Maneira
(não tradicional, mais simples e completa)



Verificar se o horário de verão está correto
# date -v21d -v10m -v0H -v0M -v0S /var/backups/ (mostra a hora do dia 21/10 às 00:00:00hs. Essa data e hora escolhida deve ser do dia da mudança do horário de verão. Se aparecer "01:00:00" é porque o horário de verão está correto para aquela data. Se aparecer "00:00:00" é porque o horário de verão não está correto para aquela data)


Backup dos arquivos de TimeZone
# cp -pi /etc/localtime /var/backups/
# cp -pi /usr/share/zoneinfo/Brazil/East /var/backups/
# cp -pi /usr/share/zoneinfo/America/Sao_Paulo /var/backups/


Verificar o Horário de Verão (Ano, Mês, Dia e Hora)
# zdump -v /etc/localtime | grep -E '(2012|2013)' (o "/etc/localtime" contém entre outras coisas o Ano, Mês, Dia do horário de verão deste servidor. Esse é o arquivo que define o dia que o horário de verão entra e sai. Também, esse é um arquivo de dados que contém a "hora local/atual" calculado em cima do TimeZone atual do sistema operacional. Na verdade ele é um link simbólico ou um cópia de um dos arquivos que ficam em "/usr/share/zoneinfo/")
# zdump -v America/Sao_Paulo | grep -E '(2012|2013)' (entre outras coisas o Ano, Mês, Dia do horário de verão do sistema operaciona que tem o TimeZone como "America/Sao_Paulo")
# zdump -v /usr/share/zoneinfo/America/Sao_Paulo | grep -E '(2012|2013)' (idem)
# zdump -v /usr/share/zoneinfo/Brazil/East | grep -E '(2012|2013)' (idem. só que para "Brazil/East")


Arquivo de configuração
# scp [email protected]:/usr/share/zoneinfo/Brazil/East /usr/share/zoneinfo/Brazil/East (a cópia do arquivo deve ser de um servidor que tenha um FreeBSD atual, pois os sistemas FreeBSD novos já contém os horários de verão corretos. Essa é a diferença entre a maneira 1 e 2. Essa é melhor, pois pegará todos os horário de verão: atual, futuros e antigos sem precisar configurar na mão)


Mudar o horário de verão
# zic -l Brazil/East (faz um "link" do "/usr/share/zoneinfo/Brazil/East" para "/etc/localtime")







Extra
(date, TZ, BRT, BRST, etc)



Comando "date" e "zdump"
# date (mostra da data e hora do sistema operacional. Também, mostra se o sistema está dentro do horário de verão ou não. Caso apareça "BRT" significa que não estão no horário de verão. Se aparecer "BRST" significa que está. "BRT" - Brasilian Time. "BRST" - Brasilian Summer Time)
# zdump /etc/localtime (idem)
# zdump -v /etc/localtime (idem, só que mostra também os horários de verão antigo, atual e futuro, ou seja, o período de tempo em que o sistema operacional mudará a hora por causa do horário de verão)
# date -u | --utc | --universal (mostra a date e hora universal/absoluto/do marco zero/do Meridiano de Greenwich)


Variável de Ambiente "TZ" (TimeZone - Fuso Horário)
# export TZ=America/Sao_Paulo (TZ é uma variável de ambiente que define o TimeZone do sistema operacional. Nesse caso define o TimeZone de "São Paulo")
# TZ=Brazil/East (idem só que para Brazil/East)
# ls /usr/share/zoneinfo/ (mostra os TimeZones do mundo)
Obs1: essa variável é importante, pois se pode ter um sistema GNU/Linux na China e ele ser acessado por pessoas em diversos países que o horário ficará correta, bastando colocar a variável "TZ" no perfil de cada usuário com o valor correspondente (ex: America/Sao_Paulo ou Africa/Nairobi)
Obs2: ao mudar o timezone, não é mudado o horário do sistema, somente a referência em relação a meridiano de Greenwich. Assim, em um sistema podemos ter vários usuários de várias regiões diferentes, configurando para cada (~/.profile) um timezone compatível.


Verificado o horário de localidades diferentes
# env TZ=America/Sao_Paulo date (mostra a data e hora de São Paulo)
# env TZ=America/Los_Angeles date ((mostra a data e hora de Los Angeles)
# env TZ=America/Bogota date (mostra a data e hora de Bogota)
# env TZ=Africa/Ceuta date (mostra a data e hora de Ceuta)
# env TZ=Africa/Nairobi date (mostra a data e hora de Nairobi)
# env TZ=Asia/Tokyo date (mostra a data e hora de Tokyo)


Comandos para o TimeZone - Fuso Horário
# tzsetup (comando que traz um menu de opção para a escolha do TimeZone)


adjkerntz - BIOS e Setup da máquina
# adjkerntz (mostra a data e hora da BIOS. Isso geralmente é configurado via o Setup da inicialização da máquina)
# adjkerntz (atualiza/sincroniza/transfere a data e hora do sistema operacional para a BIOS)





Referências Bibliográgicas
Ntp.BR - Horário de Verão
MS-Microsoft - Horário de Verão
ANEEL - Informacoes Técnicas - Horário de Verão
Hora Legal Brasileira
Decreto no. 6.558 de 8 de setembro de 2008 - Institui a hora de verão em parte do território nacional
 
 


Hugo Azevedo de Jesus
ETI - Especialista em Tecnologia da Informação