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"));