Convertir de Date a LocalDate o LocalDateTime

Convertir de Date a LocalDate

Convertir de Date a LocalDate


En esta entrada vamos a ver las aproximaciones que tenemos para convertir de Date a LocalDate o LocalDateTime y desde LocalDateTime o LocalDate a Date.

Con la incorporación a Java del paquete Java.time.* en Java 8 el tratamiento de las fechas y su uso se mejora y a veces nos encontramos con fechas en formato anterior a Java 8 que hay que convertir.

Transformar a Date desde LocalDate en Java

Para convertir un objeto de Date a LocalDate en Java vamos a hacer uso del método toInstant(), ofEpochMilli(), toLocalDate() y ofInstant().

Vamos a ver tres aproximaciones diferentes:

  • Invocando a toInstant(): El método toInstant() en Java fue introducido en Java 8 al paquete java.util.Date. Es necesario informar del time zone a través del ZoneId
  • Haciendo uso de ofEpochMilli(): Este método pertenece a Instant. Devuelve una instancia de Instant en milisegundos. Es necesario informar del time zone a través del ZoneId
  • Utilizando toLocalDate(): Haciendo de toLocalDate de java.sql.Date.
  • Utilizando ofInstant(): Método introducido en Java 9 que facilita la conversión.

Vamos a ver como convertir un objeto a LocalDate haciendo uso de toInstant().

public LocalDate fromDateToLocalDate(Date date) {
    return date.toInstant()
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
}

A continuación el siguiente ejemplo convierte un objeto Date a LocalDate haciendo uso de Instant.ofEpochMilli.

public LocalDate fromDateToLocalDate(Date date) {
    return Instant.ofEpochMilli(date.getTime())
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
}

Vamos a echar un vistazo a la clase Date de java.sql. El método Date de java.sql.Date permite convertir a LocalDate haciendo uso del método toLocalDate que se encuentra en la clase.

public LocalDate fromDateToLocalDate(Date date) {
    return new java.sql.Date(date.getTime()).toLocalDate();
}

Finalmente si utilizamos Java 9 podemos hacer uso de ofInstant de LocalDate para convertir a LocalDate y LocalDateTime:

public LocalDate fromDateToLocalDate(Date date) {
    return LocalDate.ofInstant(
      date.toInstant(), ZoneId.systemDefault());
}

A continuación vamos a convertir a LocalDateTime donde la aproximación es similar.

Convertir de Date a LocalDate en Java

Al igual que hemos hecho en el paso anterior vamos a convertir a LocalDateTime desde un objeto Date. Vamos a utilizar las mismas tres aproximaciones que para convertir de Date a LocalDate.

Haciendo uso de toInstant():

public LocalDateTime fromDateToLocalDateTime(Date date) {
    return date.toInstant()
      .atZone(ZoneId.systemDefault())
      .toLocalDateTime();
}

Haciendo uso de Instant():

public LocalDateTime fromDateToLocalDateTime(Date date) {
    return Instant.ofEpochMilli(date.getTime())
      .atZone(ZoneId.systemDefault())
      .toLocalDateTime();
}

Transformar a LocalDateTime desde java.sql.Date:

public LocalDateTime fromDateToLocalDateTime(Date date) {
    return new java.sql.Date(date.getTime()).toLocalDateTime();
}

Utilizar ofInstant de Java 9 para convertir a LocalDateTime:

public LocalDateTime fromDateToLocalDateTime(Date date) {
    return LocalDateTime.ofInstant(
      date.toInstant(), ZoneId.systemDefault());

Convertir desde LocalDate a Date

Vamos a ver como podemos convertir objetos de tipo LocalDate a java.util.Date haciendo uso de Date.from():

public Date toDate(LocalDate localDate) {
    return Date.from(localDate.atStartOfDay()
      .atZone(ZoneId.systemDefault())
      .toInstant());
}

Hay que tener en cuenta que hacemos uso de ZoneId por defecto del sistema para establecer la zona.

Convertir a Date desde LocalDateTime

Con la misma aproximación que para convertir de LocalDate a Date vamos a convertir de LocalDateTime a Date:

public Date toDate(LocalDateTime localDateTime) {
    return java.util.Date.from(localDateTime.atZone(ZoneId.systemDefault())
      .toInstant());
}

Conclusión

Cuando trabajamos con diferentes tipos de fecha de Java es muy importante conocer como convertirlas para poder homogeneizar las fechas y mostrarlas según se requiera en nuestra aplicación. En este artículo hemos podido ver las diferentes aproximaciones para convertir de Date a LocalDate o LocalDateTime y viceversa.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!


Deja una respuesta

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