Data gravada um dia antes!

Estou utilizando o netbeans 6.7 e a EclipseLink com MySQL no meu sistema.

O Problema é que quando eu gravo um data, no banco a data grava um dia antes. Por exemplo: Se eu gravar a data 20/01/2010, no banco aparece como 19/01/2010.

Já não sei o que fazer, todos os outros campos sem ser de data, gravao normalmente e não aparece nenhum erro, o que poderia ser?

[quote=elvisleyaraujo]Estou utilizando o netbeans 6.7 e a EclipseLink com MySQL no meu sistema.

O Problema é que quando eu gravo um data, no banco a data grava um dia antes. Por exemplo: Se eu gravar a data 20/01/2010, no banco aparece como 19/01/2010.

Já não sei o que fazer, todos os outros campos sem ser de data, gravao normalmente e não aparece nenhum erro, o que poderia ser?[/quote]

Nunca aconteceu este problema comigo, mas para uma melhor análise do seu problema, por que você não coloca um fragmento do seu programa para vermos como está sendo gravado a data no banco de dados?

public Object gravar(Object obj){
        Object obj_p = null;
        if (em.isOpen()) {
            try {
                em.getTransaction().begin();
                em.persist(obj);
                obj_p = obj;
                em.getTransaction().commit();
            } catch (Exception e) {
                em.getTransaction().rollback();
                e.printStackTrace();
                return null;
            }
        }
        return obj_p;
}

Eu uso este método para gravar, Na verdade ele grava um Objeto de uma classe de Entidade que representa uma tabela no banco de dados!
Está gravando tudo normal, até a data, porém está gravando um dia a menos!

Verifique qual é o timezone dos seus objetos de data e qual é o do banco e se eles são coerentes.

Como verifico qual o timezone do meu banco de dados MySQL?

desde já, agradeço a ajuda!

TIMEZONE PELO LINUX… nao sei qual seu SO
Se seu timezone não está configurado corretamente, você pode simplesmente alterá-lo.

Se você usa debian, você não precisa seguir os passos abaixo, basta executar a seguinte linha no shell:

apt-get install timezoneconf ; dpkg-reconfigure timezoneconf

Você pode verificar em qual timezone você está utilizando o comando “date”:

temp:~# date
Thu Jul 21 15:33:38 CEST 2005
temp:~#

Exatamente após a hora, temos “CEST” que é o timezone atual. Para alterar o timezone, o arquivo /etc/localtime precisa ser atualizado. Em sistemas antigos, esse arquivo é um link simbólico para outro arquivo. Em sistemas mais novos, esse arquivo realmente existe. O que fazer:

cd /usr/share/zoneinfo

Dentro deste diretório teremos vários arquivos/diretórios por país/continente.
Vamos entrar em “America”

cd America

Criando um backup do arquivo localtime atual:

cp /etc/localtime /etc/localtime-orig

Copiando

cp Sao_Paulo /etc/localtime

Verificando a hora novamente com o comando date

date

Thu Jul 21 11:08:04 BRT 2005

Agora seu sistema está no timezone correto!