O Guilherme Matos enviou uma outra dica de como lidar com o problema do horário de verão do Java.


======================================================================
Gostaria de complementar a solução proposta pelo Benício, pois
tivemos o mesmo problema aqui na BCP em SP.

A solução proposta pelo Benício é perfeitamente aplicável para novos sistemas, principalmente, se o startRule e o endRule utilizados forem informados via arquivos de configuração.

Aqui na BCP, por exemplo, onde já tinhamos uma série de aplicações implementadas em Java, distribuídas em diversos servidores, e em diversas plataformas (NT, 2000, Solaris, HP-UX, Linux, etc.) a solução de modificar as classes que manipulam data/hora torna-se inviável. Nosso administrador Unix, o Valdemar Demori, encontrou uma solução criativa, que consiste em atualizar uma classe da JRE, a TimeZoneData.java do pacote java.util.
Por questões de portabilidade, a JVM não emprega as tabelas de
definição de DST (Daylight Saving Time) do sistema operacional, que existem nos sistemas Unix, por exemplo. A definição default do período de horário de verão é realizada no código da classe java.util.TimeZoneData. A solução aplicada na BCP foi a seguinte (utilizamos uma JRE versão 1.3.0_04):

* Baixamos os fontes da JRE utilizada;
* Atualizamos a classe TimeZoneData, modificando os parâmetros dos métodos setStartRule e setEndRule dos timezones America/Sao Paulo e
Brazil/East para o novo período (como na explicação do Benício);
* Compilamos a classe java.util.TimeZoneData;
* Criamos uma cópia da lib rt.jar com a nova versão da
java.util.TimeZoneData e uma cópia da lib rt.jar original;
* Atualizamos a lib rt.jar original com a versão atualizada;

Como a maior parte dos nossos ambientes são mantidos com a mesma
versão de JRE, apenas copiamos a lib rt.jar atualizada para os outros
servidores (diretório JAVA_HOME/jre/lib) com a mesma versão de JRE. O único impacto nas aplicações existentes foi o de reiniciá-las para que a classe atualizada fosse recarregada.

Esta solução foi aplicada sobre JREs 1.3.x; pesquisando os fontes da JRE 1.4.x notamos que não existe mais a classe java.util.TimeZoneData, mas um diretório zi (Zone Info) em JAVA_HOME/jre/lib que contém arquivos binários, como jre/lib/America/Sao_Paulo. Deixo uma questão para continuar
com esta thread: é provável que o mapeamento dos períodos de DST estejam
definidos nos arquivos do diretório zi na JRE 1.4.x; neste sentido, como podemos reconfigurar um timezone na JRE 1.4.x ?

[]'s
Guilherme R. Matos Jr
Consultor Web
BCP Telecomunicações S/A


================================================================================
[dicas-list] circula diariamente com pequenas dicas sobre a plataforma Java e é
mais um serviço da Sociedade de Usuários Java - http://www.soujava.org.br
*** SouJava - Fortalecendo a Comunidade Java Brasileira! ***
- Para contribuir com uma dica, envie um e-mail para [EMAIL PROTECTED]
- Participe de outras listas de discussão sobre a linguagem Java.
Saiba mais em http://www.soujava.org.br/lista.htm
--------------------------------------------------------------------------------
- Para assinar este boletim: mailto:dicas-list-subscribe@;soujava.org.br
- Para cancelar sua assinatura: mailto:dicas-list-unsubscribe@;soujava.org.br
- Dicas anteriores: http://www.mail-archive.com/dicas-list%40soujava.org.br
- Para discutir sobre as dicas, acesse o Mundo OO (http://www.mundooo.com.br)


Responder a