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