Jump to content

ayuda con convertir fecha de String a Date (java)


Recommended Posts

hola cabros necesito ayuda porfa resulta que tengo ke hacer un mantenedor para almacenar la asistencia de trabajadores y sus datos personales que tambien incluye la fecha de nacimiento, el problema surge cuando tengo que convertir la fecha a un String a Date pero con formato yyyy-mm-dd para almacenarlo en la base de datos

try {
            String rut="";
            String nombre="";
            String cargo="";
            double sueldo=0;
            String fechaNacimiento="";
            rut=jTextFieldRut.getText();
            nombre=jTextFieldNombre.getText();
            fechaNacimiento =jTextFieldNacimiento.getText();
            cargo=jTextFieldCargo.getText();
            sueldo=Double.parseDouble(jTextFieldSueldo.getText());
            
            SimpleDateFormat fechaSql= new SimpleDateFormat("yyyy-MM-dd");
            
            
            Funcionario f=new Funcionario(rut, nombre,fechaSql.parse(fechaNacimiento), cargo, sueldo);
            
            if(FuncionariosDB.agregar(f)==1)
            {
                JOptionPane.showMessageDialog(null, "Funcionario agregado.");
                limpiar();
            }
            else
            {
                JOptionPane.showMessageDialog(null, "Funcionario no agregado.");
                limpiar();
            }
        } catch (ParseException ex) {
            Logger.getLogger(MantenedorFuncionarios.class.getName()).log(Level.SEVERE, null, ex);
        }

me tira este error por lo que se ve que me lo transforma a otro formato no al que quiero (yyyy-mm-dd)

Error: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: 'Sat May 22 00:00:00 CLT 17' for column 'fechaNacimiento' at row 1
BUILD SUCCESSFUL (total time: 22 seconds)

Edited by HUNTER X HUNTER
Link to comment
Share on other sites

:mmm: Parece que estás ocupando la lógica del formato de fecha al revés, porque se supone que fechaNacimiento usa el formato de fecha chileno, pero tú lo estás interpretando como YYYY-MM-DD (que es el que usa la base de datos).

 

El otro problema es que no sé qué hace el constructor de la clase Funcionario con la fecha, no tengo idea si hace algún tipo de conversión o no :nose: .

 

Si el campo de texto jTextFieldNacimiento usa el formato de fecha YYYY-MM-DD, entonces estás haciendo mal las cosas, no hay que pedirles a los usuarios que usen un formato de fecha al que no están acostumbrados sólo porque el motor de base de datos usa ese formato :no: .

 

Así que, si el campo de texto con la fecha de nacimiento está en el formato correcto (DD-MM-YYYY, el formato de fecha que se usa en Chile), entonces puedes ver si te sirve esta función que convierte una fecha en formato chileno a una en formato YYYY-MM-DD (el que usa la base de datos):

public static String parseDMYtoYMD(String fecha) throws Exception {
    SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy");
    SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
    Calendar c = new GregorianCalendar();
    String s;

    sdf1.setLenient(false);
    sdf2.setLenient(false);
    c.setTime(fecha.indexOf('-') >= 0 ? sdf1.parse(fecha) : sdf2.parse(fecha));
    s = String.format("%1$04d-%2$02d-%3$02d", c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH));
    return s;
}
Ojo, la función devuelve una cadena (no una variable de tipo Date), así que tendrías que modificar el constructor de la clase Funcionario.

 

Además, la función usa la clase Calendar, ya no deberías usar la clase Date.

 

No me manejo mucho en Java, pero supongo que debe haber una mejor manera de expresar una fecha como cadena, sin tener que usar el poco elegante String.format.

 

:huasonto:

Link to comment
Share on other sites

:mmm: Parece que estás ocupando la lógica del formato de fecha al revés, porque se supone que fechaNacimiento usa el formato de fecha chileno, pero tú lo estás interpretando como YYYY-MM-DD (que es el que usa la base de datos).

 

El otro problema es que no sé qué hace el constructor de la clase Funcionario con la fecha, no tengo idea si hace algún tipo de conversión o no :nose: .

 

Si el campo de texto jTextFieldNacimiento usa el formato de fecha YYYY-MM-DD, entonces estás haciendo mal las cosas, no hay que pedirles a los usuarios que usen un formato de fecha al que no están acostumbrados sólo porque el motor de base de datos usa ese formato :no: .

 

Así que, si el campo de texto con la fecha de nacimiento está en el formato correcto (DD-MM-YYYY, el formato de fecha que se usa en Chile), entonces puedes ver si te sirve esta función que convierte una fecha en formato chileno a una en formato YYYY-MM-DD (el que usa la base de datos):

public static String parseDMYtoYMD(String fecha) throws Exception {
    SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy");
    SimpleDateFormat sdf2 = new SimpleDateFormat("dd/MM/yyyy");
    Calendar c = new GregorianCalendar();
    String s;

    sdf1.setLenient(false);
    sdf2.setLenient(false);
    c.setTime(fecha.indexOf('-') >= 0 ? sdf1.parse(fecha) : sdf2.parse(fecha));
    s = String.format("%1$04d-%2$02d-%3$02d", c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH));
    return s;
}
Ojo, la función devuelve una cadena (no una variable de tipo Date), así que tendrías que modificar el constructor de la clase Funcionario.

 

Además, la función usa la clase Calendar, ya no deberías usar la clase Date.

 

No me manejo mucho en Java, pero supongo que debe haber una mejor manera de expresar una fecha como cadena, sin tener que usar el poco elegante String.format.

 

:huasonto:

 

 

 

vale comparito me sirvio de una tu solucion llevaba 2 semanas sin poder solucionarlo se agradece.

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...