Erro ao retornar data na AbtractTableModel

Por favor, alguém sabe me dizer porque quando eu carrego a data na AbstractTableModel ela retorna
a data com um dia de atraso?
ex: se eu salvar a data 12/04/2019, ao retornar na AbstractTableModel, ela aparece 11/04/2019.
Desde já agradeço!

// código que retorna a data formatada
public Date getSundayDate() {
        return sundayDate;
    }

    public String getFormatedSundayDate() {
        return new SimpleDateFormat("dd/MM/yyyy", new Locale("pt", "BR")).format(sundayDate);
    }

// código que pega dados da view para inserir no banco
   public static java.sql.Date convertUtilDateSQLDate(java.util.Date utilDate) {
        if (utilDate == null) {
            //add log and return;
            return null;
        }
        long utilDateTime = utilDate.getTime();
        java.sql.Date sqlDate = new java.sql.Date(utilDateTime);
        return sqlDate;
    }

     Date sundayDate = reportView.getDcSundayDate().getDate();
     java.sql.Date sundayDateFormated = convertUtilDateSQLDate(sundayDate);

Isso está parecendo ser problema em outra coisa, e não na AbstractTableModel.

No banco de dados salva corretamente, mas ao exibir, ela vem com este atraso.

Posta o código onde você lê a data do banco.

// método que retorna os objetos data

public List readAll() {
List datas = new ArrayList<>();
Data d;
sql = “SELECT * FROM datas”;
try {
pst = connect.prepareStatement(sql);
rs = pst.executeQuery();
if (rs != null) {
while (rs.next()) {
d = new Data();
// id no banco
d.setDataId(rs.getInt(1));
// campo JDataChoser
// este campo na JTtable da view fica um dia atrasado em relação ao banco de dados
d.setDcDate(rs.getDate(2));
// campo com data para teste
// este campo retorna a data correta na tabela (data normal)
d.setTxtDate(rs.getString(3));
datas.add(d);
}
return datas;
}
} catch (SQLException e) {
System.out.println("ERRO AO LISTAR AS DATA " + e);
} finally {
DbConnection.closeConnection(connect, pst, rs);
}
return datas;
}

// Estava usando AbstractTableModel, mas fiz com DefaultTableModel, para testar se era a tabela.
// Mas, não é.

public void loadJTable() {
DefaultTableModel dtm = (DefaultTableModel) jtData.getModel();
dtm.setNumRows(0);
DataDAO dDao = new DataDAO();

    for (Data d : dDao.readAll()) {
        dtm.addRow(new Object[]{
            d.getDataId(),
            d.getFormatedDate(),
            d.getTxtDate()
        });
    }
}

Já verificou a possibilidade de TimeZone diferentes entre aplicação e BD?

Posta o fonte da classe Data.

Quais são as colunas da tabela (nome e tipo de dado)?

Por que você obtém a coluna 2 como Date e a coluna 3 como String se ambas são datas?

A coluna dois eu usei o JDataChoser, e a coluna três um campo formatado para data. Fiz isto para tentar
identificar o erro. Só deu erro na coluna do JDataChoser.

// Aqui está a classe Data

package test.jtable;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Data {

private int dataId;
private Date dcDate;
private String txtDate;

public Data() {

}

public Data(int dataId, Date dcDate, String txtDate) {
    this.dataId = dataId;
    this.dcDate = dcDate;
    this.txtDate = txtDate;
}

public int getDataId() {
    return dataId;
}

public void setDataId(int dataId) {
    this.dataId = dataId;
}

public Date getDcDate() {
    return dcDate;
}
public String getFormatedDate() {
    return new SimpleDateFormat ("dd/MM/yyyy", new Locale("pt_BR_", "pt", "BR")).format(dcDate);
}

public void setDcDate(Date dcDate) {
    this.dcDate = dcDate;
}

public String getTxtDate() {
    return txtDate;
}

public void setTxtDate(String txtDate) {
    this.txtDate = txtDate;
}

}

Como faço isto?

Acho que o problema é no JDataChoser, só não sei como resolver!

Pessoal, obrigado pela ajuda. Consegui achar o erro, era problema de TimeZone.

1 curtida

Show, não esquece de marcar o tópico como resolvido.

Me referi às colunas na tabela do banco de dados não na JTable.