Eu crio uma instancia de GregorianCalendar e seto os valores de dia, mes, ano, hora, minuto e segundo. Seto sempre hora meio dia porque tive problemas com o horário de verão.
Depois eu tenho uma classe que é o mapeamento de uma tabela do banco. Ela tem um método para setar uma data, nele eu passo o objeto que criei anteriormente. No banco esse campo é um timestamp(6).
Fica assim:
Session hSession = sf.openSession();
Transaction tx = hSession.beginTransaction();
MinhaTabela t = new MinhaTabela ();
t.setDtTrabalho(calendar.getTime());
//seta outros campos...
hSession.saveOrUpdate(t);
tx.commit();
hSession.close();
Depois eu olho no banco e vejo que todos os objetos foram inseridos, mas, eles não estão com a hora que eu queria que eles estivessem. Depois, quando tento carregar esses dados e crio um objeto date a hora vem bangunçada e, dependendo do dia, ele acrescenta um dia (por conta do horário de verão).
Alguém sabe porque esses dados não vão para o Oracle com hora meio dia??
Até onde sei, o único horário de verão que vive bagunçado é o brasileiro. Já tive problemas onde foi necessário recompilar a JVM com o horário de verão ajustado.
De qualquer forma, certifique-se que seu Locale padrão está para o Brasil (inclua a linha abaixo num bloco static):
GregorianCalendar calendar = new GregorianCalendar();
calendar.set(GregorianCalendar.HOUR, 12);
calendar.set(GregorianCalendar.MINUTE, 0);
calendar.set(GregorianCalendar.SECOND, 0);
calendar.set(GregorianCalendar.YEAR, ano);
for(int mes = 0; mes <= 11; mes++){
calendar.set(GregorianCalendar.MONTH, mes);
for(int dia = 1; dia <= calendar.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); dia ++){
calendar.set(GregorianCalendar.DAY_OF_MONTH, dia);
MinhaTabela t = new MinhaTabela();
t.setDtTrabalho(calendar.getTime());
//outros valores setados
hSession.saveOrUpdate(t);
}
}
eu inclui:
Locale.setDefault(new Locale("pt", "BR"));
em um método estático e estou chamando este método antes de criar uma instancia de GregorianCalendar. Minhas datas foram para o banco com hora 0:00 ou 1:00.
Ele está utilizando o formato am/pm pelo que falou.
Sua aplicação e o banco rodam sob a mesma JVM?
Já tentou instalar uma outra versão da JVM para ver o que acontece?
P.S.: Se sua solução funcionou, mantenha-a até encontrar exatamente a causa do problema.