Como convertir String a LocalDate
En esta entrada vamos a ver unos cuantos ejemplos sobre como convertir String a LocalDate.
Antes de ver estos ejemplos quizás quieras echar un ojo a Java Dates y Times después de Java 8.
Algunos de los ejemplos se han realizado utilizando Lombok.
String en ISO_LOCAL_DATE
Cuando el string se encuentra en ISO_LOCAL_DATE, no es necesario realizar ningún parseo y se puede convertir de manera directa.
@Slf4j public class IsoLocalDateExample { public static void main(String[] args) { String date = "1983-05-10"; LocalDate localDate = LocalDate.parse(date); log.debug(localDate.toString()); } }
OUTPUT: 1983-05-10
String con formato
Cuando vamos a utilizar una fecha con un formato concreto, se ha de definir el tipo de formato de la fecha:
Slf4j public class StringDateFormatExample { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String date = "05/10/1983"; LocalDate localDate = LocalDate.parse(date, formatter); log.debug(localDate.toString()); log.debug("La fecha transformada es: " + formatter.format(localDate).toString()); } }
Output: 2016-08-16 La fecha transformada es: 16/08/2016
String con Mes en letra y Locale
En el siguiente ejemplo vamos a realizar la transformación de un String en el que nos llega el Mes con letra y local españa. En este caso, tenemos que establecer, por norma y para evitar la excepción, que el DateTimeFormatter tenga el Locale.US.
@Slf4j public class StringDateMonthLocaleExample { public static void main(String[] args) { Locale.setDefault(Locale.ES); DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.US); String date = "01-Aug-1983"; LocalDate date = LocalDate.parse(date, dateFormatter); log.debug(date.toString()); log.debug(dateFormatter.format(date).toString()); } }
Output: 1983-08-01 //ISO_LOCALDATE 01-Aug-1983
String con día de la Semana y Mes abreviados
Cuando se recibe un string con mes y día de la semana abreviados, ambos en inglés, se debe de realizar un formateo de la siguiente manera:
@Slf4j public class StringDateMonthWeekExample { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, MMM d yyyy", Locale.US); String stringDate = "Friday, Apr 01 1983"; LocalDate localDate = LocalDate.parse(stringDate, formatter); log.debug(localDate.toString()); log.debug(formatter.format(localDate).toString()); } }
Output: 1983-04-01 Mon, Apr 1 1983
Convertir String a LocalDateTime
En el siguiente ejemplo vamos a convertir un String con formato LocalDateTime de entrada a LocalDate, la diferencia con los ejemplos anteriores es que ahora, vamos a indicarle la hora.
@Slf4j public class StringToLocalDateTime { public static void main(String[] args) { DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("EEEE, MMM d, yyyy hh:mm:ss a", Locale.US); String stringDate = "Friday, Apr 1, 1983 10:01:00 AM"; LocalDateTime localDateTime = LocalDateTime.parse(stringDate, dateFormatter); log.debug(localDateTime.toString()); log.debug(dateFormatter.format(localDateTime).toString()); } }
Output: 1983-04-1T10:01:00 Friday, Apr 1, 1983 10:01:00 AM
Convertir String con formato LocalDateTime a LocalDate
Partiendo del ejemplo anterior, vamos a convertir la entrada del String de tipo LocalDateTime a LocalDate. Para ello, primero lo transformaremos a LocalDateTime, como en el ejemplo anterior, y después realizaremos su transformación a LocalDate.
@Slf4j public class StringToLocalDateTimeToLocalDate { public static void main(String[] args) { DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("EEEE, MMM d, yyyy hh:mm:ss a", Locale.US); String stringDate = "Friday, Apr 1, 1983 10:01:00 AM"; LocalDateTime localDateTime = LocalDateTime.parse(stringDate, dateFormatter); log.debug(localDateTime.toString()); log.debug(dateFormatter.format(localDateTime).toString()); log.debug(dateFormatter.format(localDateTime).toLocalDate().toString()); log.debug(localDateTime.toLocalDate().toString()); } }
Output: 1983-04-1T10:01:00 Friday, Apr 1, 1983 10:01:00 AM Friday, Apr 1, 1983 1983-04-1
Excepción con fecha LocalDate
Ahora vamos a provocar una excepción en la transformación de una fecha, vamos a intentar transformar una fecha que tiene día 33. Para ello vamos a hacer uso de la excepción DateTimeParseException:
@Slf4j public class LocalDateExceptionExample { public static void main(String[] args) { try { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String date = "33/10/1983"; LocalDate localDate = LocalDate.parse(date, formatter); } catch (DateTimeParseException e) { log.error("Error parsing the date"); } } }
Conclusión
En este artículo hemos visto diferentes ejemplos sobre como transformar un String a LocalDate, que será de gran utilidad para poder trabajar con diferentes formatos de LocalDate.
Si tienes alguna duda no dudes en contactar a través de un comentario un e-mail, o en nuestras redes sociales.
No te olvides de seguirnos en nuestras redes sociales Facebook o Twitter para estar actualizado.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com y te ayudaremos encantados!