Quiero convertir de cadena a fecha usando Java 8.

Puedo convertir fácilmente usando el formato SimpleDateFormat y yyyy-MM-dd

   String startDate2="2017-03-24";
   SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
   System.out.println(new java.sql.Date(sdf1.parse(startDate2).getTime()));

salida: 2017-03-24

   String startDate2="2017-03-24";
   SimpleDateFormat sdf1 = new SimpleDateFormat("uuuu-MM-dd");
   System.out.println(new java.sql.Date(sdf1.parse(startDate2).getTime()));

Pero cuando uso 'uuuu-MM-dd' en lugar de 'yyyy-MM-dd'

salida: 1970-03-24 (incorrecto)

ahora en Java 8 :

   String startDate1="2017-03-23";
   DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd");

Pero no sé cómo puedo obtener la fecha que sería el tipo de fecha sql igual que la salida correcta anterior.

2
jitendra varshney 24 mar. 2017 a las 10:37

2 respuestas

La mejor respuesta

java.sql.Date tiene un método estático valueOf que toma Java 8 LocalDate para que pueda hacer:

String startDate1 = "2017-03-23";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd");

LocalDate date = LocalDate.parse(startDate1, formatter);

java.sql.Date sqlDate = java.sql.Date.valueOf(date);
5
greg-449 24 mar. 2017 a las 07:52

Hasta donde puedo ver, tienes un texto en formato aaaa-MM-dd y lo quieres en formato uuuu-MM-dd. Entonces necesitas dos formatos:

String startDate2="2017-03-24";
SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat targetFormat = new SimpleDateFormat("uuuu-MM-dd");
java.sql.Date date = new java.sql.Date(sourceFormat.parse(startDate2).getTime());
String formattedAsDayOfWeek = targetFormat.format(date);
System.out.println(formattedAsDayOfWeek);       

La conclusión es que Date contiene un valor de milisegundos. java.sql.Date.toString() usa el formato yyyy-MM-dd independientemente de cómo lo haya analizado. java.util.sql.Date usa otro formato: EEE MMM dd hh:mm:ss zzz yyyy con inglés Locale.

Puede hacer otro formato con DateFormat -s.

Supongo que necesita el formato uuuu-MM-dd para insertar datos en la base de datos. ¿Cómo se ve esa lógica?

1
Tamas Rev 24 mar. 2017 a las 08:41