Skip to content

Formateo de fechas

Introducción

La API de Java nos proporciona clase clase para formatear las fechas y las horas, DateTimeFormatter, al igual que su antecesora está compuesta de patrones de cadena que representas diferentes símbolos relacionados con las fechas:

  • y, nos permite acceder al año en formato de cuatro o dos dígitos (2014 o 14).
  • D, nos permite obtener el número de día del año (225).
  • d, al contrario del anterior nos devuelve el número del día del mes en cuestión (27).
  • L, nos ayuda a obtener el mes del año en forma numérica, M nos da el mes en texto.
  • H, nos da la hora.
  • s, nos da los segundos.
  • m, nos permite obtener los minutos.
  • a, nos da el am o pm de la hora.
  • z, nos permite acceder al nombre de la zona horaria.

Para construir una instancia de esta clase, existe un método estático ofPattern(str) que recibe una cadena con los patronos indicados. Existe una versión sobrecargada que además recibe un Locale para devolver la fecha formateado al idioma deseado.

Si el método recibe un patrón erróneo lanzará la excepción IllegalArgumentException

DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/M/yyyy", Locale.of("es", "ES"));

Parsear una fecha a cadena

Las clases LocalDate, LocalTime, LocalDateTime, YearMonth, MonthDay, y el resto de clases referidas a las fechas tienen un método format() que recibe un objeto de la clase DateTimeFormatter para formatear la fecha con dicho formato. Además la clase DateTimeFormatter tiene el mismo método, pero recibe un objeto fecha.

Veamos un ejemplo:

public class DateToString {
    public void show(){
        LocalDateTime date = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/M/yy");

        System.out.println(date.format(formatter));
    }

    public static void main(String[] args) {
        new DateToString().show();
    }
}

Parsear una cadena a una fecha

Las clases de manejo de fecha, tienen un método estático llamado parse, que recibe la fecha en formato cadena, y un formato (en caso de no recibirlo, tiene una versión sobrecargada donde obtiene el formato estándar) devolviendo así un objeto de tipo fecha. En caso de que la cadena no cumpla con el patrón se lanzará una excepción DateTimeParseException

public class StringToDate {
    public void show(){
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-LL-yyyy");
        System.out.println(LocalDate.parse("20-03-2023", formatter));
    }

    public static void main(String[] args) {
        new StringToDate().show();
    }
}