Retorno de data 1969-12-31

Bom dia,

Retornando ao meu estou com Java estou deparando com um pequeno problema.

Meu BD está com o formato US e quando eu uso para converter para BR mostra essa data 1969-12-31, estou usando a classe SimpleDateFormat no seguinte formato (SimpleDateFormat sdf = new SimpleDateFormat(“dd-MM-yyyy”) mais quando não tiro a mesma a data que está no banco de dados mostra normalmente… Ex. 2021-10-20

Sem mais detalhes (como o código que lê/grava no banco e o como está fazendo a conversão, o tipo da tabela no banco de dados, alguns dados de exemplo, etc), não tem como adivinhar o que está errado…

Opa Bom dia Amigo, desculpa da demora.

Segue o código abaixo.

public class GanhosDAO {

private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public void Adicionar (Ganhos ganhos){
    
   Connection con = BdConexaoDAO.getConnection();
    PreparedStatement pstmt = null;
    
    try {
        
        String sql = "INSERT INTO TB_GANHO "
                + "(CATEGORIA, "
                + "KMS_PERCORRIDOS, "
                + "HORAS_TRABALHADAS, "
                + "VIAGENS_REALIZADAS, "
                + "VALOR_GANHO, "
                + "DATA, "
                + "OBSERVACAO)" +
                " VALUES (?,?,?,?,?,?,?)";
         pstmt = con.prepareStatement(sql);
         
         pstmt.setString(1, ganhos.getCategoria_ganhos());             
         pstmt.setString(2, ganhos.getKmsPercorridos_ganhos());             
         pstmt.setString(3, ganhos.getHorasTrabalhadas_ganhos());              
         pstmt.setString(4, ganhos.getViagensRealizadas_ganhos());             
         pstmt.setString(5, ganhos.getValor_ganhos());             
         pstmt.setString(6, sdf.format(ganhos.getData_ganhos()));             
         pstmt.setString(7, ganhos.getObservacao_ganhos());
         
         pstmt.execute();
         
         JOptionPane.showMessageDialog(null,"Registro salvo com sucesso!" ,
                 "Informação", JOptionPane.INFORMATION_MESSAGE );
    } catch (Exception ErroSql) {
        JOptionPane.showMessageDialog(null,"Erro ao adicionar registro: "+ErroSql ,
                 "Erro", JOptionPane.ERROR_MESSAGE );            
    }
    finally
    {
        BdConexaoDAO.closeConnection(con, pstmt);
    }   
}

public void Alterar (Ganhos ganhos){
    
    Connection con = BdConexaoDAO.getConnection();
    PreparedStatement pstmt = null;
    
    try {
        
        String sql = "UPDATE TB_GANHO SET "
                + "CATEGORIA=?,"
                + "KMS_PERCORRIDOS=?,"
                + "HORAS_TRABALHADAS=?,"
                + "VIAGENS_REALIZADAS=?,"
                + "VALOR_GANHO=?,"
                + "DATA=?,"
                + "OBSERVACAO=? "
                + "WHERE ID_GANHO=? ";            
       
        pstmt = con.prepareStatement(sql);
        
        pstmt.setString(1, ganhos.getCategoria_ganhos());
        pstmt.setString(2, ganhos.getKmsPercorridos_ganhos());
        pstmt.setString(3, ganhos.getHorasTrabalhadas_ganhos());
        pstmt.setString(4, ganhos.getViagensRealizadas_ganhos());
        pstmt.setString(5, ganhos.getValor_ganhos()); 
        pstmt.setString(6, sdf.format(ganhos.getData_ganhos()));
        pstmt.setString(7, ganhos.getObservacao_ganhos());            
        pstmt.setInt(8, ganhos.getCodigo_ganhos());                       
       
            pstmt.executeUpdate();
          
            
    JOptionPane.showMessageDialog(null,"Registro alterado com sucesso!" ,
                 "Alteração", JOptionPane.INFORMATION_MESSAGE );
    } catch (Exception ErroSql) {
        JOptionPane.showMessageDialog(null,"Erro ao alterar registro: "+ErroSql ,
                 "Erro", JOptionPane.ERROR_MESSAGE ); 
        
        
    }
    finally
    {
        BdConexaoDAO.closeConnection(con,pstmt);
    }       
}

public void Remover (Ganhos ganhos){
    
    Connection con = BdConexaoDAO.getConnection();
    PreparedStatement pstmt = null;
    try {         
        String sql = "DELETE FROM TB_GANHO WHERE ID_GANHO=?";
        pstmt = con.prepareStatement(sql);
        
        pstmt.setInt(1, ganhos.getCodigo_ganhos());
        
        pstmt.executeUpdate();
     
    JOptionPane.showMessageDialog(null,"Registro removido com sucesso!" ,
                 "Alteração", JOptionPane.INFORMATION_MESSAGE );
    } catch (Exception ErroSql) {
        JOptionPane.showMessageDialog(null,"Erro ao remover registro: "+ErroSql ,
                 "Erro", JOptionPane.ERROR_MESSAGE );            
    }
    finally
    {
        BdConexaoDAO.closeConnection(con, pstmt);
    }  
}

    public List<Ganhos> Listar(){
    
    List<Ganhos> listaGanhos = new ArrayList<>();
    
    Connection con = BdConexaoDAO.getConnection();
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    
   
    try{
    
        pstmt = con.prepareStatement("SELECT * FROM TB_GANHO");  
        
        rs = pstmt.executeQuery();
        
        while(rs.next()){
            
            Ganhos ganhos = new Ganhos();
            
            ganhos.setCodigo_ganhos(rs.getInt("ID_GANHO"));
            ganhos.setCategoria_ganhos(rs.getString("CATEGORIA"));                
            ganhos.setKmsPercorridos_ganhos(rs.getString("KMS_PERCORRIDOS"));
            ganhos.setHorasTrabalhadas_ganhos(rs.getString("HORAS_TRABALHADAS"));
            ganhos.setViagensRealizadas_ganhos(rs.getString("VIAGENS_REALIZADAS"));
            ganhos.setValor_ganhos(rs.getString("VALOR_GANHO")); 
            ganhos.setData_ganhos(rs.getDate("DATA"));                 
            ganhos.setObservacao_ganhos(rs.getString("OBSERVACAO"));
            
            listaGanhos.add(ganhos);

        }
    }
    
    catch (SQLException ErroSql)
    
    {
           
          JOptionPane.showMessageDialog(null, "Erro ao carregar a dados na tabela:" +ErroSql, "Erro", JOptionPane.ERROR_MESSAGE);
    }
    finally
    {
       BdConexaoDAO.closeConnection(con, pstmt, rs);
    }
        return listaGanhos;
}



public List<Ganhos> PesqListarData(String dataInicial, String dataFinal){

       List<Ganhos> listaGanhos = new ArrayList<>();

       Connection con = BdConexaoDAO.getConnection();
       PreparedStatement pstmt = null;
       ResultSet rs = null;

       try{
           
           String sql = "SELECT * FROM TB_GANHO WHERE DATA BETWEEN ? AND ?";  
           
           pstmt = con.prepareStatement(sql); 
           pstmt.setString(1,dataInicial);            
           pstmt.setString(2,dataFinal);  

           rs = pstmt.executeQuery();               

           while(rs.next()){
               
               Ganhos ganhos = new Ganhos();

               ganhos.setCodigo_ganhos(rs.getInt("ID_GANHO"));
               ganhos.setCategoria_ganhos(rs.getString("CATEGORIA"));                
               ganhos.setKmsPercorridos_ganhos(rs.getString("KMS_PERCORRIDOS"));
               ganhos.setHorasTrabalhadas_ganhos(rs.getString("HORAS_TRABALHADAS"));
               ganhos.setViagensRealizadas_ganhos(rs.getString("VIAGENS_REALIZADAS"));
               ganhos.setValor_ganhos(rs.getString("VALOR_GANHO")); 
               ganhos.setData_ganhos(rs.getDate("DATA"));
               ganhos.setObservacao_ganhos(rs.getString("OBSERVACAO"));

               listaGanhos.add(ganhos);
               
           }
       }

       catch (SQLException ErroSql)

       {

             JOptionPane.showMessageDialog(null, "Erro ao carregar a dados na tabela:" +ErroSql, "Erro", JOptionPane.ERROR_MESSAGE);
       }
       finally
       {
          BdConexaoDAO.closeConnection(con, pstmt, rs);
       }
           return listaGanhos;
   }

}

Aqui me parece que o campo no banco está com o tipo DATE ou DATETIME, certo? Se for isso, então você não deveria converter para string nas outras queries. Por exemplo, aqui:

pstmt.setString(6, sdf.format(ganhos.getData_ganhos()));

Se o campo é uma data (o tipo na tabela do banco é DATE, DATETIME, etc), então grave a data diretamente:

pstmt.setDate(6, ganhos.getData_ganhos());

Uma coisa que você precisa entender é que datas não têm formato.

Uma data é apenas um conceito, uma ideia: ela representa um ponto específico no calendário.

Por exemplo, a data de “15 de janeiro de 2020”, representa isso: o ponto específico do calendário que corresponde ao dia 15 do mês de janeiro do ano de 2020. Para expressar essa ideia em forma de texto, eu posso escrevê-la de diferentes formas:

  • 15/01/2020 (um formato bem comum em muitos países, incluindo o Brasil)
  • 1/15/2020 (formato americano, invertendo o dia e mês)
  • 2020-01-15 (o formato ISO 8601)
  • Quinze de Janeiro de 2020 (em bom português)
  • January 15th, 2020 (em inglês)
  • 2020年1月15日 (em japonês)
  • e muitos outros…

Repare que cada um dos formatos acima é diferente, mas todos representam a mesma data (os mesmos valores numéricos do dia, mês e ano).

Quando você grava uma data no banco, ele grava apenas os valores (os números), em algum formato interno que não importa (é problema dele gerenciar isso). É claro que, quando eu faço SELECT ou imprimo na tela, a data tem que ser mostrada em algum formato. Mas só porque “o SELECT mostrou dd/mm/aaaa”, isso não significa que a data necessariamente está gravada naquele formato.

Dito isso, quando você faz queries (seja SELECT, UPDATE, INSERT, o que for), você manipula o Date. Quando for mostrar na tela, aí você converte o Date para string (usando o SimpleDateFormat, por exemplo). Se tem uma string que representa a data (no caso da pesquisa), aí você faz o oposto (usa parse para converter a string para data).

1 curtida