Erro ao retornar data na AbtractTableModel

13 respostas
java
S

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);

13 Respostas

Lucas_Camara

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

S

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

staroski

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

S

// 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;

}
S

// 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()
        });
    }
}
Jonathan_Medeiros

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

staroski

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?

S

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;
}

}

S

Como faço isto?

S

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

S

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

Jonathan_Medeiros

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

staroski

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

Criado 12 de abril de 2019
Ultima resposta 22 de abr. de 2019
Respostas 13
Participantes 4