Java 8 introdujo el nuevo API Date&Time, con el cual se tuvo una nueva y más sencilla manera de interactuar con fechas en Java, dado que las existentes clases java.util.Date
y java.util.Calendar
no son tan sencillas. Cuando hablamos de fechas hay 2 operaciones que solemos hacer de forma frecuente parsear un String a un objeto Date/Time y formatear un objecto Date/Time a String. Este artículo se enfoca en estas acciones.
Date/Time a String
Si requerimos una representación String
de una fecha, necesitamos usar el método format
de las instancias Date/Time
. Este método recibe una instancia de DateTimeFormatter
, donde podemos indicar el formato o patrón de salida de dicha fecha.
import java.time.format.DateTimeFormatter; import java.time.LocalDateTime; LocalDateTime datetime = LocalDateTime.now(); String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
No importa si lo que se tiene es una instancia de LocalDateTime
, LocalTime
, LocalDate
, or ZonedDateTime
. El DateTimeFormatter
y el método format
funciona para todos.
String a Date/Time
Tal como se mencionó, otra tarea muy común es parser un String a una fecha, para estos casos tenemos a disposición el método estático parse
en las clases Date/Time
. Este require que le indiquemos el String que quermos parsear y una instancia DateTimeFormatter
con el patrón de dicho String. Como resultado retornará una instancia Date/Time
como salida, dicha instancia es del mismo tipo de la clase de donde usamos el método parse
.
import java.time.format.DateTimeFormatter; import java.time.LocalDateTime; //Local Date Time String datetimestring = "2021-01-18 00:00:00.0"; LocalDateTime datetime = LocalDateTime.parse(datetimestring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")); //Local Date String datestring = "2021-01-18"; LocalDateTime datetime = LocalDate.parse(datestring, DateTimeFormatter.ofPattern("yyyy-MM-dd"));