Analizando cadena en mysql Fecha

Tengo una interfaz gráfica de usuario que toma algunas entradas del usuario, también toma la fecha actual. Entonces necesito almacenarlos en una base de datos. Todo está bien, pero no puedo entender la forma en que debo analizar la cadena de entrada del campo de fecha en mysql date para insertarlo en la base de datos.

Tengo un código como este.

Date date = txtToday.getText(); 

Sé que esto se debe analizar en un tipo que sea compatible con el tipo de Data datos. Este tipo de Date es de java.sql.Date . ¿Cómo puedo superar este problema?

El formato de campo FECHA predeterminado de MySQL es: AAAA-MM-DD

Mientras que en Java, el formato predeterminado de la Clase de fecha ‘(disponible en el paquete java.util) es, dow mon dd hh: mm: ss zzz yyyy

así que usa esto:

  Date date = txtToday.getText(); String pattern = "yyyy-MM-dd"; SimpleDateFormat formatter = new SimpleDateFormat(pattern); String mysqlDateString = formatter.format(date); System.out.println("Java's Default Date Format: " + date); System.out.println("Mysql's Default Date Format: " + mysqlDateString); 
 try { SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); Date dob = null; dob = sdf.parse(txtToday.getText()); java.sql.Date sqlDate = new java.sql.Date(dob.getTime()); c1.setDOB(sqlDate); //use this sqlDate for inserting into Database } catch (ParseException e) { System.out.println("Parse exception,incorrect input in the textbox"); e.printStackTrace(); } 

Si esta línea de código funciona …

 Date date = txtToday.getText(); 

Luego solo usa el tiempo para convertirlo en una fecha sql …

 java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 

Ver mi respuesta a una pregunta duplicada .

Usando java.time

Utilice las clases modernas de java.time en lugar de las problemáticas clases de fecha y hora heredadas.

No hay necesidad de usar java.sql.Date . Esa clase es reemplazada por LocalDate . La clase LocalDate representa un valor de solo fecha sin hora del día y sin zona horaria.

Los controladores JDBC que cumplen con JDBC 4.2 pueden tratar directamente con los tipos java.time llamando a:

  • PreparedStatement::setObject
    myPrepStmt.setObject (…, myLocalDate);
  • ResultSet::getObject
    LocalDate ld = myResultSet.getObject (…, LocalDate.class);

Para la presentación de LocalDate al usuario, genere una cadena para mostrar en su interfaz de usuario. Utilice un DateTimeFormatter para localizar automáticamente. Para localizar, especifique:

  • FormatStyle para determinar cuánto tiempo o abreviado debe ser la cadena.
  • Locale para determinar (a) el lenguaje humano para la traducción del nombre del día, el nombre del mes y tal, y (b) las normas culturales que deciden los problemas de abreviatura, uso de mayúsculas, puntuación, separadores y demás.

Ejemplo:

 Locale l = Locale.CANADA_FRENCH ; DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( l ); String output = zdt.format( f ); 

También puede ir en la otra dirección, analizando una cadena de entrada para obtener una fecha.

 LocalDate ld = LocalDate.parse( input , f ) ; 

Trampa para la excepción lanzada si la entrada del usuario es defectuosa o inesperada.

 try{ LocalDate ld = LocalDate.parse( input , f ) ; myPrepStmt.setObject( … , ld ) ; } catch ( DateTimeParseException e ) { … // Handle the error condition of faulty/unexpected input by user. } 

Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases sustituyen a las antiguas y problemáticas clases de fecha y hora como java.util.Date , Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases java.time?

  • Java SE 8 , Java SE 9 y posteriores
    • Incorporado.
    • Parte de la API de Java estándar con una implementación en paquete.
    • Java 9 agrega algunas características menores y correcciones.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time está respaldada a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
    • Vea Cómo usar ThreeTenABP… .

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí como Interval , YearWeek , YearQuarter , y más .