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