Converter String para uma data

Bom dia amigos,

Preciso de ajuda, preciso capturar a data de nascimento do usuário e converter para uma data para calcular automáticamente a idade do usuário, alguém poderia me dar uma ajuda?

Grande Abraço

Marcelo Logan

DateFormat df = new SimpleDateFormat ("dd/MM/yyyy");
df.setLenient (false);
Date dt = df.parse ("31/12/1960");

Use o método parse() da classe SimpleDateFormat. Ex.:

// cria o formatador
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy"); 

Date nascimento_usuario = formatador.parse("18/09/1981");

Tutorial no GUJ:
http://www.guj.com.br/java.tutorial.artigo.8.1.guj

:wink:

Utilize a classe Date, do pacote java.util.Date.

Esta classe possui métodos para manipular datas, onde você pode pegar separadamente o ano, mês, dia, etc…

Abraço!

Opa! Percebi que vc tb quer calcular idade, eu posso sugerir este código:

public int getIdade(int dia, int mes, int ano){		
    //  Cria um objeto calendar com a data de nascimento	
    Calendar dateOfBirth = new GregorianCalendar(ano, mes, dia);   
		
    // Cria um objeto calendar com a data atual    
    Calendar today = Calendar.getInstance();

    // Obtém a idade baseado no ano    
    int age = today.get(Calendar.YEAR) - dateOfBirth.get(Calendar.YEAR);
    dateOfBirth.add(Calendar.YEAR, age); 
    if (today.before(dateOfBirth)) {
    	age--;
    }
    return age;
}

:wink:

Aproveitando a duvida do colega, tbem queria tirar uma duvida sobre esse assunto.
Formatei a data como esta descrito acima, mas mesmo assim continua dando erro, pois quando eu digito a data no JTextField

O meu codigo para formatar a data esta assim:

public void gravarFrm_Testes()
{
try
{
String SQL = “INSERT INTO TESTES (NOM_USUARIO, RG, DATA)
values (’”+
NOM_USUARIO+"’,’"+RG+"’,’"+DATA+"’)";

        rs = stm.executeQuery(SQL);
        rs = stm.executeQuery("COMMIT");
} 
catch(Throwable ex) 
{
        ex.printStackTrace();
}

}

public void formataFrm_Testes()
{
try
{
NOM_USUARIO = jTextField1.getText();
RG = Integer.parseInt(jTextField2.getText());
DATA = new Date();
sdf = new SimpleDateFormat(“dd/MM/yyyy”);
String Valor_Data = jTextField3.getText();
DATA = sdf.parse(Valor_Data);
}
catch(Throwable ex)
{
System.out.println(“ERRO NO FORMATAR”);
ex.printStackTrace();
}
}

Quando digito a data 25011979 , da o seguinte erro:

ERRO NO FORMATAR
java.text.ParseException: Unparseable date: “25011979”
at java.text.DateFormat.parse(DateFormat.java:335)
at Work_ADMIN.Frm_Teste.formataFrm_Testes(Frm_Teste.java:184)
at Work_ADMIN.Frm_Teste.jButton1ActionPerformed(Frm_Teste.java:135)
at Work_ADMIN.Frm_Teste.access$000(Frm_Teste.java:48)
at Work_ADMIN.Frm_Teste$1.actionPerformed(Frm_Teste.java:108)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.sql.SQLException: ORA-01858: foi localizado um caractere não-numérico onde se esperava um numérico

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:572)
    at Work_ADMIN.Frm_Teste.gravarFrm_Testes(Frm_Teste.java:165)
    at Work_ADMIN.Frm_Teste.jButton1ActionPerformed(Frm_Teste.java:136)
    at Work_ADMIN.Frm_Teste.access$000(Frm_Teste.java:48)
    at Work_ADMIN.Frm_Teste$1.actionPerformed(Frm_Teste.java:108)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
    at java.awt.Component.processMouseEvent(Component.java:5488)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1766)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

E quando digito a data 25/01/1979 da o se guinte erro:

java.sql.SQLException: ORA-01858: foi localizado um caractere não-numérico onde se esperava um numérico

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:572)
    at Work_ADMIN.Frm_Teste.gravarFrm_Testes(Frm_Teste.java:165)
    at Work_ADMIN.Frm_Teste.jButton1ActionPerformed(Frm_Teste.java:136)
    at Work_ADMIN.Frm_Teste.access$000(Frm_Teste.java:48)
    at Work_ADMIN.Frm_Teste$1.actionPerformed(Frm_Teste.java:108)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
    at java.awt.Component.processMouseEvent(Component.java:5488)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Window.dispatchEventImpl(Window.java:1766)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Espero que alguem possa me ajudar.

Desde ja muito obrigado.

Date não está deprecated, só alguns construtores. De qualquer maneira você criando a string SQL na mão, e isso dá um monte de dores de cabeça. No seu caso, o SQL não aceita nem o formato 25011979 nem o formato 25/01/1979. Preste mais atenção na hora de montar a string SQL, ou de preferência use o PreparedStatement, que evita 95% dos problemas com formatos SQL que variam de um banco para o outro.

Ola, estou utilizando o PreparedStatement, mas mesmo assim esta apresentando problemas.

O meu codigo esta assim agora:

public void gravarFrm_Testes() {
try {

        pstmt = con.prepareStatement("INSERT INTO TESTES (NOM_USUARIO, RG, DATA) VALUES (?, ?, ?) ");
        pstmt.clearParameters(); 
        pstmt.setString(1, NOM_USUARIO);
        pstmt.setInt(2, RG);
        pstmt.setDate(3, (java.sql.Date) DATA);
        pstmt.executeUpdate(); 

        int i = pstmt.executeUpdate("COMMIT");
    }catch(Throwable ex) {
        ex.printStackTrace();
    }
}

  
public void formataFrm_Testes() {
    try 
    {
        NOM_USUARIO = jTextField1.getText();
        RG = Integer.parseInt(jTextField2.getText());
        DATA = new Date();
        sdf = new SimpleDateFormat("dd/MM/yyyy"); 
        Valor_Data = jTextField3.getText();
        DATA = sdf.parse(Valor_Data);
    } catch(Throwable ex) {
        System.out.println("ERRO NO FORMATAR");
        ex.printStackTrace();
    }
}

E quando digito a data no formato descrito abaixo aparece os seus seguintes erros:

DATA = 10/01/1979

java.lang.ClassCastException: java.util.Date
at Work_ADMIN.Frm_Teste.gravarFrm_Testes(Frm_Teste.java:171)
at Work_ADMIN.Frm_Teste.jButton1ActionPerformed(Frm_Teste.java:137)
at Work_ADMIN.Frm_Teste.access$000(Frm_Teste.java:47)
at Work_ADMIN.Frm_Teste$1.actionPerformed(Frm_Teste.java:109)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

DATA = 100179

java.text.ParseException: Unparseable date: “100179”
at java.text.DateFormat.parse(DateFormat.java:335)
at Work_ADMIN.Frm_Teste.formataFrm_Testes(Frm_Teste.java:189)
at Work_ADMIN.Frm_Teste.jButton1ActionPerformed(Frm_Teste.java:136)
ERRO NO FORMATAR
at Work_ADMIN.Frm_Teste.access$000(Frm_Teste.java:47)
at Work_ADMIN.Frm_Teste$1.actionPerformed(Frm_Teste.java:109)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
java.lang.ClassCastException: java.util.Date
at Work_ADMIN.Frm_Teste.gravarFrm_Testes(Frm_Teste.java:171)
at Work_ADMIN.Frm_Teste.jButton1ActionPerformed(Frm_Teste.java:137)
at Work_ADMIN.Frm_Teste.access$000(Frm_Teste.java:47)
at Work_ADMIN.Frm_Teste$1.actionPerformed(Frm_Teste.java:109)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Você não pode transformar um java.util.Date em um java.sql.Date só usando um cast. Lembre-se: cast não é conversão.

Para criar um java.sql.Date a partir de um java.util.Date, tente:

new java.sql.Date (DATA.getTime())

Outra dica - para melhorar a manutenção do seu código, procure seguir as “Code Conventions” da Sun.

Pessoal, eu consegui enviar o valor no fomato data, porem a maneira como consegui esta em depreciação, alguem sabe alguma outra forma que nao seja essa como mostro abaixo, desde ja obrigado a quem puder me ajudar…

try
{
NOM_USUARIO = jTextField1.getText();
RG = Integer.parseInt(jTextField2.getText());
Valor_Data = jTextField3.getText();
} catch(Throwable ex) {
System.out.println(“ERRO NO FORMATAR”);
ex.printStackTrace();

try
{
pstmt = con.prepareStatement("INSERT INTO TESTES (NOM_USUARIO, RG, DATA) VALUES (?, ?, ?) ");
pstmt.clearParameters();
pstmt.setString(1, NOM_USUARIO);
pstmt.setInt(2, RG);
pstmt.setDate(3, (new java.sql.Date(DATA.parse(Valor_Data))));
pstmt.executeUpdate();
pstmt.executeUpdate(“COMMIT”);
}catch(Throwable ex)
{
ex.printStackTrace();
}

Galera, porque o seguinte código não compila, até agora estou quebrando a cabeça e nada:

String aux="13/10/1983"; SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(aux); System.out.println(d.toString());

O erro é :

java.text.ParseException: Unparseable date: "13/10/1983"
	at java.text.DateFormat.parse(DateFormat.java:335)
	at Datas.main(Datas.java:17)

[quote=Neo]Galera, porque o seguinte código não compila, até agora estou quebrando a cabeça e nada:

String aux="13/10/1983"; SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(aux); System.out.println(d.toString());

O erro é :

java.text.ParseException: Unparseable date: "13/10/1983" at java.text.DateFormat.parse(DateFormat.java:335) at Datas.main(Datas.java:17) [/quote]

O SimpleDateFormat deve receber o formato desejado que no seu caso não é “yyyy-MM-dd” e sim “dd/MM/yyyy”

String aux="13/10/1983";	
SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");
Date d = sdf.parse(aux);
sdf.applyPattern("yyyy-MM-dd");
aux=sdf.format(d);
System.out.println(aux);

Agora funcionou. Não sei se me entenderam, mais eu pego aux que vem da camada View nesse formato dd/MM/yyyy, e depois transformo no formato yyyy-MM-dd, que é o formato do banco de dados.

Valeu pela ajuda. E até mais.

Utilizem o codigo que o drix postou, date esta depreciado para formatarem datas utilizem a API GregorianCalendar.

Att