java.sql.Timestamp sendo transportado remotamente para máquinas com diferentes GMTs  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
lavh
GUJ Master

Membro desde: 30/07/2006 16:09:55
Mensagens: 1311
Offline

Caros,

tenho um código +ou- assim:



O meu atributo t é persistido no banco em uma aplicação, depois é tranferido remotamente (EJB) para
outra aplicação, onde ele é persistido novamente. Nesse caminho, eu não realizo nenhuma mudança nele,
mas por incrivel que pareça, em um banco a data fica com um horário, e no outro com um horário(as vezes dia)
diferente. (Detalhe: Eu só dou um setTimestamp no PrepareStatement)

Estou desconfiando que o problema é porque essas máquinas estão com GMT diferentes. Ambas tem a mesma data,
só que o GMT delas é diferente(sei lah pq é assim, mas tah assim).

Eu fiz alguns testes rápidos aqui com um programinha main() e se eu mudo o meu GMT, mesmo sem alterar a data/hora
do sistema, ele imprime uma data diferente quando eu mando imprimir o Timestamp no console.

Ou seja:

Deixo o horário como 19:52, mas mudo o GMT para -10:00. Dai ele imprime uma hora diferente, 10:52.
Se volto o HMT para -3:00, imprime 19:52.

To meio perdido com isso tudo:

-Mesmo que os GMTs das máquinas estejam diferentes, o objeto Timestamp não é alterado. Só pelo GMT ser
diferente a data jah vai ser mudada? Como isso? E ainda sem mudar o objeto?

Alguem tem uma explicação pra isso? Da onde a JVM pega o horário? Ele não olha a hora do SO, mas olha
o GMT do SO?

Enfim, uma confusão! Se alguem puder me esclarecer, ficarei grato!

Obrigado!!!

This message was edited 1 time. Last update was at 18/02/2008 19:57:45

thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

A classe java.sql.Timestamp herda diretamente de java.util.Date, que tem apenas um membro - um valor "long" que representa o número de milissegundos transcorridos desde 01/jan/1970, horário UTC (ou seja, GMT+00:00).

Quando você transporta um Timestamp de uma máquina para outra, você pode ter interpretações diferentes do fuso horário conforme o timezone configurado em cada uma delas, e conforme a versão do Java instalado em cada uma delas - já que o timezone do Java é configurado no próprio Java, e o timezone do Windows ou do Linux ou do Unix é configurado em outro lugar.

Existe uma ferramenta chamada tzupdater (que pode ser baixada na mesma página onde se baixa a JDK) para acertar a tabela de timezones do Java (a partir da versão 1.4). Essa ferramenta deve ser chamada periodicamente para acertar essa tabela.

[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team