Modificar hora pc

É possível mecher na hora do computador (do sistema operacional no caso) via java?

Pois tenho dois sistemas… em duas lojas…portanto separados fisicamente, e tem um sistema intermediário que fica toda hora sincronizando os dados de uma base e da outra… alguns updates… se utilizada da data de alteração…usando a regrinha…de quem alterou por último é a que prevalece…

Porém…se os pcs que possuem as bases de dados não estiverem com o mesmo horário, ferra tudo

por isso pergunto…é possível alterar a data e hora do computador via java?..

se sim…como faz…pois daí…antes de fazer alguma sincronização, o sistema verifica na net em algum site de hora certa…e acerta o horario antes de realizar eventos de sincronização…

Em um sistema operacional como o Linux ou o Windows Vista/7/8, um programa de usuário não pode acertar a hora do computador sem obter as permissões adequadas. Como isso é muito complicado, normalmente se usa um serviço que sincroniza com um servidor de domínio (no caso do Windows) ou um relógio na Internet (como o Windows Vista/7/8 e o Mac e o Linux). Procure por “ntp”.

Então a melhor coisa a se fazer nesse caso…seria na hora de instalar o sistema… configurar também… no relógio do SO para que sincronize com um servidor online…sendo o server do próprio windows mesmo ou o server ntp no caso do linux, então não terei problemas com diferenças de horários…

É o correto a ser feito. Uma vez feito isso, você não se preocupa mais (nem mesmo com a história do horário de verão :slight_smile: )

Cara, eu fiquei sabendo de uma biblioteca que você pode usar: jgroups

É uma API de multicast. Basicamente, você abre um socket nos lugares que você precisa de atualização. Quando um servidor atualiza, ele manda uma mensagem para os outros. Que se atualizam por causa da mensagem.

É uma solução que independe de horário e talvez seja mais confiável de você fazer.

É o certo mesmo, principalmente porque se [quote=leopoldof]o sistema (…) acerta o horario antes de realizar eventos de sincronização[/quote] imagina a bagunça que pode dar:

O usuário fez a operação com a hora errada, que fica gravada.
Antes de sincronizar o relógio é acertado… e aí zuou tudo, porque a operação realizada não tem um horário confiável em relação ao servidor, e nem em relação ao próprio computador que agora tem a hora certa! A operação pode até ficar com data/hora futura.

Por isso mantenha sempre ajustado através dos serviços apropriados, e não só na hora da sincronização.

[quote=jaboot]Cara, eu fiquei sabendo de uma biblioteca que você pode usar: jgroups

É uma API de multicast. Basicamente, você abre um socket nos lugares que você precisa de atualização. Quando um servidor atualiza, ele manda uma mensagem para os outros. Que se atualizam por causa da mensagem.

É uma solução que independe de horário e talvez seja mais confiável de você fazer.[/quote]

Sei. O problema de multicast é que funciona bem em computadores na mesma rede, mas se os computadores estiverem em redes diferentes (como é o caso de 2 lojas) isso vai dar problemas :frowning:

To vendo… que além de eu mesmo configurar o horário dos pcs onde estiverem instalado o sistema, e além de avisar…, assustar o usuário he he h para não mecher no horário do computador… vou ter que fazer duas rotinas…

  1. ao inicializar a máquina…e o sistema, entra em contato com a outra loja atraves de socket e verifica os horários…se não estiverem com o mesmo horário, bloqueia o sistema e pede para o usuário sincronizar os horários… e informa a hora da outra loja…depois reiniciar o sistema…

2)Para o caso do usuario modificar a hora no meio do expediente de trabalho, fazer uma rotina em que de minuto em minuto, ou a cada cinco minutos ou coisa assim…a rotina compara para ver se não foi alterado o horário…algo parecido com isso
Obs: fiz rápido só para expressar a idéia…não está rodando nada ainda…

...
ty{
Date dataAnterior;
Date dataAtual;
    while(true){
          dataAnterior = new Date();
          Thread.sleep(tempoEspera);
           dataAtual = new Date();
         //metodo com nome ficticio para somar a data com os milisegundos definidos
           if (dataAtual.compareTo( metodoSomaDataETempoEspera (dataAnterior ,tempoEspera) != 0){
           ...
           //avisa ao usuario que a data do pc foi alterada.... e pede para sincronizar...mostrando o horário da outra loja

           }

     }

}catch(Exception ex){
//   tratamento do erro
...
} 

o que vcs acham…? Muita gambiarra?

Não mexer no relógio do computador? Você está usando Windows 95?

Bem…alguém sempre tem a senha de adm na empresa…e por fim…algum sempre acaba mechericando onde não deve…se todos os usuários fizessem as coisas como pensamos na hora de programar, não haveria tantos problemas…e não teria que colocar tantas travas nos sistemas… he he he

E ainda tem várias micro empresas onde usa-se um computador só…e o mesmo só tem um login…(de adm)…