Fusos e etcetra

Algum tempo atrás usava um relatório de um serviço em que o se você mudasse fuso horário (timezone) do relatório de GMT (0) para o horário brasileiro. Ao invés de trocar de GMT para GMT -3 e diminuir três horas, na verdade mudava para +3.

Exemplo: Se no Brasil (sem horário de verão e horário de Brasília) fosse 16 horas, GMT seria 19. Mas no relatório apresentava 22 horas.

O detalhe é que na opção para mudar só tinha opção Etc/GMT -3.

Em sistemas Unix/Linux, Etc é um subdiretório (/usr/share/zoneinfo/Etc). Ele serve de referências de fuso horário para regiões não habitadas.

Então, porque usar +3 ao invés de -3?

Aprendi nas aulas de geografia que o estado de São Paulo está no UTC-03:00. Estamos acostumados usar como referência o sinal de menos, exemplo: “Rio de Janeiro está 3 horas atrás (-3) de Londres. Se Londres for 5 horas, o horário no Rio de Janeiro será 2 horas.”. Entretanto isso é um pouco diferente em sistemas operacionais baseados na POSIX.

Na POSIX, os fusos horários que estão do lado Oeste ao GMT tem o sinal positivo (+) e os que estão à Leste tem o sinal negativo (-).

Com o date e a variável de ambiente TZ pode-se brincar um pouco:


#GMT
fike@klatoon:~$ TZ='GMT' date
Sex Mai 16 20:35:03 GMT 2014

#UTC -3
fike@klatoon:~$ TZ='GMT+3' date -R
Fri, 16 May 2014 17:35:03 -0300

#UTC +3
fike@klatoon:~$ TZ='GMT-3' date -R
Fri, 16 May 2014 23:35:03 +0300

#Brasil Leste
fike@klatoon:~$ TZ='Brazil/East' date
Sex Mai 16 17:35:03 BRT 2014

#Brasil Oeste
fike@klatoon:~$ TZ='Brazil/West' date
Sex Mai 16 16:35:03 AMT 2014

#São Paulo
fike@klatoon:~$ TZ='America/Sao_Paulo' date
Sex Mai 16 17:35:03 BRT 2014

#Rio Branco - Acre
fike@klatoon:~$ TZ='America/Rio_Branco' date
Sex Mai 16 15:35:03 ACT 2014

#Brasil
fike@klatoon:~$ TZ='Brazil/East+3' date
Sex Mai 16 20:35:03 Brazil 2014

#São Paulo
fike@klatoon:~$ TZ='America/Sao_Paulo+3' date
Sex Mai 16 20:35:03 America 2014

#Cuiaba
fike@klatoon:~$ TZ='America/Cuiaba' date
Sex Mai 16 16:35:03 AMT 2014

#Cuiaba
fike@klatoon:~$ TZ='America/Cuiaba+4' date
Sex Mai 16 20:35:03 America 2014

#Araguaina
fike@klatoon:~$ TZ='America/Araguaina' date
Sex Mai 16 17:35:03 BRT 2014

#Fernando de Noronha
fike@klatoon:~$ TZ='America/Noronha' date
Sex Mai 16 18:35:16 FNT 2014

Para saber quais são as cidades ou regiões que pode usar no TZ, olhe no ”/usr/share/zoneinfo” que tem outros. Para saber todas as cidades brasileiras que são possíveis de usar no TZ, procure no arquivo zone.tab no tzdata que é disponibilizado na IANA. Uma versão dele pode ver na Wikipedia.

Portanto, fusos horários no horário padrão (standard time) que estão à Oeste de UTC ou GMT tem o sinal negativo (-) e os fusos à Leste que estão à Leste tem o sinal positivo. Mas quando você tem que ajustar o fuso horário num sistema Unix/Linux, lembre-se que o sinal é ao contrário; Oeste é positivo (+) e Leste é negativo (-).

Na lista debian-user tem uma thread com uma boa explicação sobre o tema também recomendável ler o artigo na Wikipedia sobre os fusos horários no Brasil (em inglês que é mais datalhado).

Obs. Imagem da Wikipedia, a original pode ser acessada aqui.

comments powered by Disqus