Saltar al contenido

¿Cómo analizar / formatear fechas con LocalDateTime? (Java 8)

Solución:

Analizando fecha y hora

Para crear un LocalDateTime objeto de una cadena puede utilizar la estática LocalDateTime.parse() método. Se necesita una cuerda y una DateTimeFormatter como parámetro. los DateTimeFormatter se utiliza para especificar el patrón de fecha / hora.

String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

Formateo de fecha y hora

Para crear una cadena formateada a partir de un LocalDateTime objeto puedes usar el format() método.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.of(1986, Month.APRIL, 8, 12, 30);
String formattedDateTime = dateTime.format(formatter); // "1986-04-08 12:30"

Tenga en cuenta que existen algunos formatos de fecha / hora de uso común predefinidos como constantes en DateTimeFormatter. Por ejemplo: usando DateTimeFormatter.ISO_DATE_TIME para formatear el LocalDateTime instancia de arriba daría como resultado la cadena "1986-04-08T12:30:00".

los parse() y format() Los métodos están disponibles para todos los objetos relacionados con la fecha / hora (p. ej. LocalDate o ZonedDateTime)

También puedes usar LocalDate.parse() o LocalDateTime.parse() en un String sin proporcionarle un patrón, si el String está en formato ISO-8601.

por ejemplo,

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
System.out.println("Date: " + aLD);

String strDatewithTime = "2015-08-04T10:11:30";
LocalDateTime aLDT = LocalDateTime.parse(strDatewithTime);
System.out.println("Date with Time: " + aLDT);

Producción,

Date: 2015-08-04
Date with Time: 2015-08-04T10:11:30

y use DateTimeFormatter solo si tiene que lidiar con otros patrones de fechas.

Por ejemplo, en el siguiente ejemplo, dd MMM uuuu representa el día del mes (dos dígitos), tres letras del nombre del mes (enero, febrero, marzo, …) y un año de cuatro dígitos:

DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu");
String anotherDate = "04 Aug 2015";
LocalDate lds = LocalDate.parse(anotherDate, dTF);
System.out.println(anotherDate + " parses to " + lds);

Producción

04 Aug 2015 parses to 2015-08-04

también recuerda que el DateTimeFormatter el objeto es bidireccional; puede analizar tanto la entrada como la salida de formato.

String strDate = "2015-08-04";
LocalDate aLD = LocalDate.parse(strDate);
DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd MMM uuuu");
System.out.println(aLD + " formats as " + dTF.format(aLD));

Producción

2015-08-04 formats as 04 Aug 2015

(consulte la lista completa de patrones para formatear y analizar DateFormatter)

  Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189
   M/L     month-of-year               number/text       7; 07; Jul; July; J
   d       day-of-month                number            10

   Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
   Y       week-based-year             year              1996; 96
   w       week-of-week-based-year     number            27
   W       week-of-month               number            4
   E       day-of-week                 text              Tue; Tuesday; T
   e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
   F       week-of-month               number            3

   a       am-pm-of-day                text              PM
   h       clock-hour-of-am-pm (1-12)  number            12
   K       hour-of-am-pm (0-11)        number            0
   k       clock-hour-of-am-pm (1-24)  number            0

   H       hour-of-day (0-23)          number            0
   m       minute-of-hour              number            30
   s       second-of-minute            number            55
   S       fraction-of-second          fraction          978
   A       milli-of-day                number            1234
   n       nano-of-second              number            987654321
   N       nano-of-day                 number            1234000000

   V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
   z       time-zone name              zone-name         Pacific Standard Time; PST
   O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
   X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
   x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
   Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

   p       pad next                    pad modifier      1

   '       escape for text             delimiter
   ''      single quote                literal           '
   [       optional section start
   ]       optional section end
   #       reserved for future use
   {       reserved for future use
   }       reserved for future use

Ambas respuestas anteriores explican muy bien la pregunta sobre los patrones de cuerdas. Sin embargo, en caso de que esté trabajando con ISO 8601, no es necesario que lo solicite. DateTimeFormatter dado que LocalDateTime ya está preparado para ello:

Convertir LocalDateTime a la cadena de zona horaria ISO8601

LocalDateTime ldt = LocalDateTime.now(); 
ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC); //you might use a different zone
String iso8601 = zdt.toString();

Convierta de la cadena ISO8601 de nuevo a LocalDateTime

String iso8601 = "2016-02-14T18:32:04.150Z";
ZonedDateTime zdt = ZonedDateTime.parse(iso8601);
LocalDateTime ldt = zdt.toLocalDateTime();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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