Java String to Date es una de las conversiones más habituales que tenemos que hacer . Para ello hay que recordar que en Java 8 llegan nuevas clases inmutables orientadas a simplificar el manejo de fechas. En concreto LocalDate , LocalTime y LocalDateTime son las principales y simplifican sobre manera el manejo de fechas comparadas con Date , DateFormat y Calendar que son clásicas de Java.
Vamos a ver unos ejemplos básicos.
Java String to Date
A partir de ahora es muy sencillo convertir una cadena a fecha ya que la propia clase LocalDate nos admite el uso de cadenas de forma directa a través del método parse siguiendo un formato muy concreto de año-mes-día.
package com.arquitecturajava; import java.time.LocalDate; public class Principal { public static void main(String[] args) { LocalDate fecha = LocalDate.parse("2020-06-10"); System.out.println(fecha.getDayOfMonth()); System.out.println(fecha.getYear()); System.out.println(fecha.getMonth()); } }
El método parse recibe el año el mes y el día separados por un guion y automaticamente convierte la fecha, podemos ver el resultado en la consola:
Java LocalTime
De igual forma podemos trabajar con LocalTime que almacena hora minutos y segunos y nos permitirá una transformación de estos datos.
package com.arquitecturajava; import java.time.LocalTime; public class Principal3 { public static void main(String[] args) { LocalTime localTime = LocalTime.parse("12:23:44"); System.out.println(localTime.getHour()); System.out.println(localTime.getMinute()); System.out.println(localTime.getSecond()); } }
El resultado es muy similar al anterior pero orientado al uso horario:
Java 8 LocalDateTime
Java 8 también permite combinar ambos conceptos en una sola clase que aglutine el concepto de Date y de Time que como no podria ser de otra manera se denomina LocalDateTime. Así podremos realizar un cambio de Java String to Date aplicando tanto fecha como hora.
import java.time.LocalDateTime; public class Principal2 { public static void main(String[] args) { LocalDateTime localDateTime = LocalDateTime.parse("2020-06-01T11:20:15"); System.out.println(localDateTime.getHour()); System.out.println(localDateTime.getMinute()); System.out.println(localDateTime.getSecond()); System.out.println(localDateTime.getDayOfMonth()); System.out.println(localDateTime.getMonthValue()); System.out.println(localDateTime.getYear()); } }
El resultado lo podemos ver por la consola:
Java String to Date CustomFormat
Acabamos de ver una introducción al formato de fechas con Java 8 . En muchas ocasiones no nos valdrá con el formato por defecto sino que necesitaremos personalizarlo a traves de un DateTimeFormatter .
Vamos a ver cómo podemos realizar esta operación.
package com.arquitecturajava; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class Principal2 { public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); LocalDateTime localDateTime = LocalDateTime.parse("2020-06-01 11:20", formatter); System.out.println(localDateTime.getHour()); System.out.println(localDateTime.getMinute()); System.out.println(localDateTime.getSecond()); System.out.println(localDateTime.getDayOfMonth()); System.out.println(localDateTime.getMonthValue()); System.out.println(localDateTime.getYear()); } }
El resultado es identico pero hemos personalizado el formateo decidiendo donde ponemos cada valor y que estructura usamos para separarlo: