| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/02/2008 19:56:45
|
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/02/2008 08:57:50
|
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.
|
|
|
 |
|
|
|
|