Atualizar uma data e hora dinamicamente?

Pessoal, gostaria de saber se alguém já passou por esta necessidade ou que saiba e possa me ajudar:

Hoje tenho uma classe que pega o horário do servidor do banco de dados e através desta eu atualizo na tela para o usuário, so que a cada segundo eu instancio um novo objeto desta classe para que possa atualizar a data e hora novamente e disponibiliza-la na tela. Gostaria de fazer assim:

No inicio faço uma pesquisa no servidor de banco de dados e pegoa data/hora e atualizar um objeto, exemplo: calendar, com esta informação e a partir dai ele adiciona o tempo sem eu precisar ler novamente o banco.

Deu para entender ? Alguém pode me ajudar ?

[quote=SINVAL]Pessoal, gostaria de saber se alguém já passou por esta necessidade ou que saiba e possa me ajudar:

Hoje tenho uma classe que pega o horário do servidor do banco de dados e através desta eu atualizo na tela para o usuário, so que a cada segundo eu instancio um novo objeto desta classe para que possa atualizar a data e hora novamente e disponibiliza-la na tela. Gostaria de fazer assim:

No inicio faço uma pesquisa no servidor de banco de dados e pegoa data/hora e atualizar um objeto, exemplo: calendar, com esta informação e a partir dai ele adiciona o tempo sem eu precisar ler novamente o banco.

Deu para entender ? Alguém pode me ajudar ?[/quote]

na web ou desktop???

possiveis soluções:
web -> javascript
desktop -> Thread

[]'s

Java Application.

???

Por “Java application” estou entendendo “desktop”. Então é o que o jgbt lhe falou (ponha uma java.swing.Timer ou java.util.Timer com período de 1 segundo, ou talvez de 0.5 segundo, alterando o texto de java.awt.Label ou java.swing.JLabel.). Não sei se você está usando AWT ou Swing ou SWT, por isso é que não dou detalhes maiores.

Thingol, realmente é desktop minhas transações, estou utilizando o swing para desenvolver as telas, mas como vc disse colocar um timer a cada segundo, mas a cada segundo iria ao banco de dados fazer uma leitura ? Exemplo: Select sysdate from dual; ou tem como fazer com que meu primeiro acesso atualize este “relogio” em memoria e a partir dai ele automaticamente seja atualizado sem ter que acessar o banco de dados a cada segundo.

Não sei se ficou claro. :?

Vamos dar um exemplo para sermos mais claros.

Digamos que a data real está na variável Date dtReal = /* valor obtido a partir de SELECT SYSDATE FROM DUAL; */ e a data do computador está na variável Date dtComputador;

Você sabe que em um determinado momento, há uma diferença entre elas que deve permanecer aproximadamente constante com o passar do tempo. Ou seja, se agora no seu servidor são 10:54, o seu computador está marcando 10:52, e se no servidor forem 11:37, no seu computador deve marcar 11:35 (ou seja, ele sempre deve estar atrasado ou adiantado por um valor constante, que é nesse caso é 2 minutos = 120 seg = 120000 milissegundos).

A idéia é obter esse valor do atraso quando você puxar a data do SQL.
Sempre que você mostrar a data na tela, obter a data com new Date(), somar ou subtrair do valor do atraso, para você mostrar a data que você estima que seja. Então se agora new Date() retornar 12:45, subtrair os 120000 ms e você vai mostrar 12:43 na tela.