[Resolvido]Mostrar datas dd/MM/yyyy

quero um exemplo de como utilizar a classe SimpleDateFormat, para converter a data do banco para o programa (mostrapesquisa())
e um exemplo para converter a data do programa para o banco. (calcular())

não consigo resolver esse problema… aí está a o meu codigo sem o simpledateformat.

espero que alguem possa me ajudar nessa batalha.

os formatos que eu quero utilizar no programa é dd/MM/yyyy
e no banco de dados eu uso o mysql com o formato yyyy-MM-dd

resolvido[code]

private void mostraPesquisa(List cheques) throws ParseException {
while (tmCheque.getRowCount() > 0) {
tmCheque.removeRow(0);
}

    if (cheques.size() == 0) {
        JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
    } else {
        String[] linha = new String[]{null, null, null, null, null, null, null};
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar

        for (int i = 0; i < cheques.size(); i++) {

            Date dataven = sdf1.parse(cheques.get(i).getDataven());
            Date datapag = sdf1.parse(cheques.get(i).getDatapag());

            tmCheque.addRow(linha);
            tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
            tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
            tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
            tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
            tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
            tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
            tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);
            tmCheque.setValueAt(sdf2.format(dataven), i, 7);
            tmCheque.setValueAt(sdf2.format(datapag), i, 8);
        }

    }
}[/code]

Utilize a classe SimpleDateFormat para formatar uma data.

Exemplo:
System.out.println("Data formatada: " + new SimpleDateFormat(“dd/MM/yyyy”).format(new Date()));

obrigado pela dica, mas eu queria um exemplo dessa simpledateformat para converter as datas…

converter as datas? de Date pra String e vice-versa? Use os métodos format e parse, respectivamente

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date hojeDate = new Date();
String hojeString = "10/02/2010";
try {
      Date stringToDate = sdf.parse(hojeString);
      String dateToString = sdf.format(hojeDate);
      System.out.println("Data em formato Date: "+stringToDate+"\n"+"Data em formato String: "+dateToString);
} catch (ParseException e) {
      e.printStackTrace();
} 

Bom amigo, se não quiser usar o SimpleDateFormat, pode implementar vc mesmo, olha o exemplo que fiz pra te ajudar::
Neste exemplo, converte a data para um outro formato, tipo, se vc joga no padrão brasileiro, retorna no padrão americano, e se joga no padrão americano retorna no padrão brasileiro.


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, converteData("15/08/2009"));
        JOptionPane.showMessageDialog(null, converteData("2009-12-01"));
    }
    public static String converteData(String data){
       String dataFinal = "";       
       String[] outraData = data.split("/");
       String[] outraData2 = data.split("-");       
       if(!outraData[0].equals(data)){
           dataFinal = outraData[2]+"-"+outraData[1]+"-"+outraData[0];
           return comparaData(dataFinal, data, "[0-9]{4}-([0-1]{1})([0-9]{1})-([0-3]{1})([0-9]{1})");
       }else{           
           dataFinal= outraData2[2]+'/'+outraData2[1]+'/'+outraData2[0];
           return comparaData(dataFinal, data, "([0-3]{1})([0-9]{1})/([0-1]{1})([0-9]{1})/[0-9]{4}");
           
       }       
    }
    private static String comparaData(String dataFinal, String data, String eregex){
        Pattern padrao;
        Matcher m;
        padrao = Pattern.compile(eregex);
           m = padrao.matcher(dataFinal);
           if(!m.find()){
               JOptionPane.showMessageDialog(null, "Data Incorreta amigo");
               return data;
           }
        return dataFinal;
    }

}


[quote=xjunior]Bom amigo, se não quiser usar o SimpleDateFormat, pode implementar vc mesmo, olha o exemplo que fiz pra te ajudar::
Neste exemplo, converte a data para um outro formato, tipo, se vc joga no padrão brasileiro, retorna no padrão americano, e se joga no padrão americano retorna no padrão brasileiro.


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, converteData("15/08/2009"));
        JOptionPane.showMessageDialog(null, converteData("2009-12-01"));
    }
    public static String converteData(String data){
       String dataFinal = "";       
       String[] outraData = data.split("/");
       String[] outraData2 = data.split("-");       
       if(!outraData[0].equals(data)){
           dataFinal = outraData[2]+"-"+outraData[1]+"-"+outraData[0];
           return comparaData(dataFinal, data, "[0-9]{4}-([0-1]{1})([0-9]{1})-([0-3]{1})([0-9]{1})");
       }else{           
           dataFinal= outraData2[2]+'/'+outraData2[1]+'/'+outraData2[0];
           return comparaData(dataFinal, data, "([0-3]{1})([0-9]{1})/([0-1]{1})([0-9]{1})/[0-9]{4}");
           
       }       
    }
    private static String comparaData(String dataFinal, String data, String eregex){
        Pattern padrao;
        Matcher m;
        padrao = Pattern.compile(eregex);
           m = padrao.matcher(dataFinal);
           if(!m.find()){
               JOptionPane.showMessageDialog(null, "Data Incorreta amigo");
               return data;
           }
        return dataFinal;
    }

}


[/quote]

Caramba, isso me lembrou javascript hehehe.

Eu acho que o ideal é usar o SimpleDataFormat mesmo.

SimpleDataFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(suaData);//sua data é o campo lido do MySQL

Pessoal, testei aqui mas ta dando erro…

[code]private void mostraPesquisa(List cheques) {
while (tmCheque.getRowCount() > 0) {
tmCheque.removeRow(0);
}

    if (cheques.size() == 0) {
        JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
    } else {
        String[] linha = new String[]{null, null, null, null, null, null, null};
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        for (int i = 0; i < cheques.size(); i++) {
            tmCheque.addRow(linha);
            tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
            tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
            tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
            tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
            tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
            tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
            tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);

tmCheque.setValueAt(sdf.format(cheques.get(i).getDataven()), i, 7);

tmCheque.setValueAt(sdf.format(cheques.get(i).getDatapag()), i, 8);

        }

    }
}[/code]

Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:281)
at java.text.Format.format(Format.java:140)
at pneus.form.jTCheque.mostraPesquisa(jTCheque.java:643) #
at pneus.form.jTCheque.listarCheque(jTCheque.java:618)
at pneus.form.jTCheque.jBPesquisarActionPerformed(jTCheque.java:441)
at pneus.form.jTCheque.access$000(jTCheque.java:31)
at pneus.form.jTCheque$1.actionPerformed(jTCheque.java:100)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

o # sinaliza a linha que o programa da a exeption

ele disse que não conseguiu converte o objeto informado em um Date.

Vc ta acessando direto do banco? davaven e datapag são objetos java.util.Date ou java.sql.Date?

eu to tirando direto do banco, exatamente.

eu tenho uma jtable que mostra a pesquisa… que é o método que eu coloquei o simpledateformat.

ele da erro e aparece só 1 contato da lista, com as duas datas em vazias…

dataven e datapag são duas strings.

dan então antes vc tem que converter apara Date

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL
SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar
Date dtven = sdf1.parse(dataven);
String dtformatada = sd2.format(dtven);
private void mostraPesquisa(List<Cheque> cheques) {
        while (tmCheque.getRowCount() > 0) {
            tmCheque.removeRow(0);
        }

        if (cheques.size() == 0) {
            JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
        } else {
            String[] linha = new String[]{null, null, null, null, null, null, null};
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL  
            SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar  
            Date dtven = sdf1.parse(dataven);// erro aqui, "dataven"  
            String dataven = sdf2.format(dtven);
            
            for (int i = 0; i < cheques.size(); i++) {
            
                 
                tmCheque.addRow(linha);
                tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
                tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
                tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
                tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
                tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
                tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
                tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);
                tmCheque.setValueAt(sdf2.format(cheques.get(i).getDataven()), i, 7);
                tmCheque.setValueAt(sdf2.format(cheques.get(i).getDatapag()), i, 8);
            }

        }
    }

dando erro na parte comentada…

[quote=Felagund]
Caramba, isso me lembrou javascript hehehe.

Eu acho que o ideal é usar o SimpleDataFormat mesmo.

SimpleDataFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); sdf.format(suaData);//sua data é o campo lido do MySQL [/quote]

kkkkkk, cheio d graça… :lol: :lol: :lol:

Bom, realmente é melhor usar um já implementado, mas só fiz pra mostrar que pode usar outras alternativas… 8)

[quote=DanOliveira][code]
private void mostraPesquisa(List cheques) {
while (tmCheque.getRowCount() > 0) {
tmCheque.removeRow(0);
}

    if (cheques.size() == 0) {
        JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
    } else {
        String[] linha = new String[]{null, null, null, null, null, null, null};
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL  
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar  
        Date dtven = sdf1.parse(dataven);// erro aqui, "dataven"  
        String dataven = sdf2.format(dtven);
        
        for (int i = 0; i < cheques.size(); i++) {
        
             
            tmCheque.addRow(linha);
            tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
            tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
            tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
            tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
            tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
            tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
            tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);
            tmCheque.setValueAt(sdf2.format(cheques.get(i).getDataven()), i, 7);
            tmCheque.setValueAt(sdf2.format(cheques.get(i).getDatapag()), i, 8);
        }

    }
}

[/code]

dando erro na parte comentada…[/quote]

private void mostraPesquisa(List<Cheque> cheques) {
        while (tmCheque.getRowCount() > 0) {
            tmCheque.removeRow(0);
        }

        if (cheques.size() == 0) {
            JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
        } else {
            String[] linha = new String[]{null, null, null, null, null, null, null};
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL  
            SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar  
            
            for (int i = 0; i < cheques.size(); i++) {
            
                 String dataven = sdf1.parse(cheques.get(i).getDataven());
                tmCheque.addRow(linha);
                tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
                tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
                tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
                tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
                tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
                tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
                tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);
                tmCheque.setValueAt(sdf2.format(dataven ), i, 7);
                tmCheque.setValueAt(sdf2.format(cheques.get(i).getDatapag()), i, 8);//Fazer igual acima
            }

        }
    }

Olhe a diferença do meu codigo e do seu.

agora mudou o erro, nossa… é bronca.

 private void mostraPesquisa(List<Cheque> cheques) {
        while (tmCheque.getRowCount() > 0) {
            tmCheque.removeRow(0);
        }

        if (cheques.size() == 0) {
            JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
        } else {
            String[] linha = new String[]{null, null, null, null, null, null, null};
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL
            SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar

            for (int i = 0; i < cheques.size(); i++) {

                String dataven = sdf1.parse(cheques.get(i).getDataven()); // erro1 , pede pra inicializar variavel como Date
                String datapag = sdf1.parse(cheques.get(i).getDatapag());// erro2, pede pra inicializar variavel como Date

                tmCheque.addRow(linha);
                tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
                tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
                tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
                tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
                tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
                tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
                tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);
                tmCheque.setValueAt(sdf2.format(dataven), i, 7);
                tmCheque.setValueAt(sdf2.format(datapag), i, 8);
            }

        }
    }
 private void mostraPesquisa(List<Cheque> cheques) {
        while (tmCheque.getRowCount() > 0) {
            tmCheque.removeRow(0);
        }

        if (cheques.size() == 0) {
            JOptionPane.showMessageDialog(null, "Nenhum cheque cadastrado");
        } else {
            String[] linha = new String[]{null, null, null, null, null, null, null};
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL
            SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");//formato para mostrar

            for (int i = 0; i < cheques.size(); i++) {

                Date dataven = sdf1.parse(cheques.get(i).getDataven()); // erro1 , pede pra inicializar variavel como Date
                Date datapag = sdf1.parse(cheques.get(i).getDatapag());// erro2, pede pra inicializar variavel como Date

                tmCheque.addRow(linha);
                tmCheque.setValueAt(cheques.get(i).getIdc(), i, 0);
                tmCheque.setValueAt(cheques.get(i).getNomecliente(), i, 1);
                tmCheque.setValueAt(cheques.get(i).getBanco(), i, 2);
                tmCheque.setValueAt(cheques.get(i).getAgencia(), i, 3);
                tmCheque.setValueAt(cheques.get(i).getConta(), i, 4);
                tmCheque.setValueAt(cheques.get(i).getNumcheque(), i, 5);
                tmCheque.setValueAt(cheques.get(i).getValor(), i, 6);
                tmCheque.setValueAt(sdf2.format(dataven), i, 7);
                tmCheque.setValueAt(sdf2.format(datapag), i, 8);
            }

        }
    }

converte em Date as variaveis não String.

posta o erro mano…

opa , PEGOOOOOU

tu pode me dar um exemplo da conversão de dd/MM/yyyy no metodo cadastro?

só pra eu ter uma base para fazer o resto…

Rafael Felix e XJUNIOR

obrigado pela ajuda… antes de fechar o topico, vocÊs respondem essa duvida aí de cima?

valeu

Creio que isto basta, não testei…

SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
x1.setDataven(data.parse(jTDataven.getText())); 

Deu certo?