[Resolvido]Mostrar datas dd/MM/yyyy

24 respostas
D

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
private void mostraPesquisa(List<Cheque> 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);
            }

        }
    }

24 Respostas

B

Utilize a classe SimpleDateFormat para formatar uma data.

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

D

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

E

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

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

}
F

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

}

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
D

Pessoal, testei aqui mas ta dando erro..

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

        }
    }

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

F

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?

D

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.

F

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

X

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

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)

F
DanOliveira:
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..

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.

D

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

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

X

posta o erro mano…

D

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…

D

Rafael Felix e XJUNIOR

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

valeu

X

Creio que isto basta, não testei…

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

Deu certo?

D

ta errado xjunior.

e agora?

public void cadastro() throws ParseException {

        try {
            SimpleDateFormat data = new SimpleDateFormat("yyyy-MM-dd");//formato do mySQL  
            
            double valort = Double.parseDouble(jTValor.getText());
              
            
            Cheque x1 = new Cheque();
            x1.setNomecliente(jTNomecliente.getText());
            x1.setBanco(jTBanco.getText());
            x1.setAgencia(jTAgencia.getText());
            x1.setConta(jTConta.getText());
            x1.setNumcheque(jTNumcheque.getText());
            x1.setValor(valort);
            x1.setDataven(data.parse(jTDataven.getText()));
            x1.setDatapag(data.parse(jTDatapag.getText()));
            ChequeDao dao = new ChequeDao();

            dao.adiciona(x1);
        } catch (SQLException ex) {
            Logger.getLogger(jTCheque.class.getName()).log(Level.SEVERE, null, ex);

        }
    }

fiz com yyyy-MM-dd porque vai ser escrito em 01/12/2010 e vai transformar para 2010-12-01 pra inserir no mysql.

X

pera que vou testar,

aqui, posta a exceção que gerou fi. pra mim ver o que é que tá dando de errado…

D

ele nem rodou, pediu pra inicializar uma variavel… foi erro de lógica msm.

x1.setDataven(data.parse(jTDataven.getText()));
x1.setDatapag(data.parse(jTDatapag.getText()));

as linhas com erros

X

mano, to meio sem tempo aqui, mas já mostrei uma solução que vc não vai ter problemas:

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

e chama o método no seu código por:

converteData("15/08/2009")
L

Qqr caso, outro post:
http://www.guj.com.br/java/256609-converter-string-para-date

Criado 9 de fevereiro de 2010
Ultima resposta 28 de out. de 2011
Respostas 24
Participantes 6