JavaFx TableView exibindo data com 1 dia de atraso do Database

5 respostas
java
V

Bom dia!!!

Quando puxo uma data armazenada na base de dados MySQL, ao exibi-la em um TableView ou DatePicker, a data fica com 1 dia anterior ao que está armazenado no Database.

Já tentei diversas modificações no código, mas este problema em específico nunca resolve.

Alguém sabe como corrigir isto?

Obrigado desde já!

Segue o código simplificado.

Classe Contratos:

package modelo;

import java.sql.Date;

public class Contratos implements Comparable<Contratos>{

private ObjectProperty  <LocalDate> data_inicio;
 
public Contratos(LocalDate data_inicio){> 
 this.data_inicio =  new SimpleObjectProperty<>(data_inicio);
}
 
public LocalDate getData_inicio() {  return data_inicio.get(); } 
public void setData_inicio(LocalDate data_inicio) {  this.data_inicio = new SimpleObjectProperty<>(data_inicio); }
public ObjectProperty<LocalDate> data_inicioProperty(){ return data_inicio;  }

public static void buscarDados(Connection connection, ObservableList<Contratos> lista){

try {Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT datai_cont FROM odinsgat.contratos;"  );

  while(rs.next()){
  lista.add( new Contratos  ( rs.getDate("datai_cont").toLocalDate()) );
  } 
    
} catch (SQLException ex) {
Logger.getLogger(Tipos.class.getName()).log(Level.SEVERE, null, ex);
}
}

Classe AdcContratosController:

package Adc;

public class AdcContratosController implements Initializable {

private int contId;
private ObservableList<Contratos>       listaContratos;

@FXML   private DatePicker      dtpInicioCont;

@FXML   private TableView      <Contratos>                       tv_cont_td;
@FXML   private TableColumn <Contratos, LocalDate>     tc_cont_datai; 

@Override
    public void initialize(URL url, ResourceBundle rb) {

//------- Populando TableView

tc_cont_datai.setCellValueFactory (cellData -> cellData.getValue().data_inicioProperty());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
tc_cont_datai.setCellFactory(tc -> {
                return new TableCell<Contratos, LocalDate>() {
                    @Override
                    protected void updateItem(LocalDate date, boolean empty) {
                        super.updateItem(date, empty);
            
                        if (date == null || empty) {
                        setText(null);
                        } else {    setText(formatter.format(date));    }
                    }
                    
                };
            });
    }
    
}

Dados armazenados:

image`

Dados Exibidos:

5 Respostas

V

Help!

M

Somente na tableview a data aparece errado ou em qualquer lugar ?

V

Jogando em uma String também aparece errado:

`

System.out.println(cont.getData_inicio());

`

M

Então o erro esta no método buscarDados ou em alguma configuração de datas do seu banco,
tenta fazer um teste em outra tabela com data para ver se acontece a mesma coisa

B

Eu nunca “mexir” com JavaFX. Mas veja se existe algum .xml e adiciona:

<context-param>
         <param-name>
 javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
         <param-value>true</param-value>
     </context-param>

Ou algo que seja parecido para o JavaFX, você de uma pesquisada, blz ?

Criado 12 de março de 2019
Ultima resposta 19 de mar. de 2019
Respostas 5
Participantes 3