Como convertir String a LocalDate

De 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!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *