¿Cómo puedo analizar/formatear fechas con LocalDateTime? (Java 8)
Java 8 agregó una nueva API java.time para trabajar con fechas y horas ( JSR 310 ).
Tengo la fecha y la hora como cadena (por ejemplo, "2014-04-08 12:30"
). ¿ Cómo puedo obtener una LocalDateTime
instancia de la cadena dada?
Una vez que terminé de trabajar con el LocalDateTime
objeto: ¿Cómo puedo convertir la LocalDateTime
instancia nuevamente a una cadena con el mismo formato que se muestra arriba?
Analizando fecha y hora
Para crear un LocalDateTime
objeto a partir de una cadena, puede utilizar el LocalDateTime.parse()
método estático. Se necesita una cadena y un DateTimeFormatter
parámetro como. Se DateTimeFormatter
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);
Formatear fecha y hora
Para crear una cadena formateada a partir de un LocalDateTime
objeto, puede utilizar 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: usar DateTimeFormatter.ISO_DATE_TIME
para formatear la LocalDateTime
instancia de arriba daría como resultado la cadena "1986-04-08T12:30:00"
.
Los métodos parse()
y format()
están disponibles para todos los objetos relacionados con fecha/hora (por ejemplo, LocalDate
o ZonedDateTime
)
También puedes utilizar LocalDate.parse()
o LocalDateTime.parse()
sin String
proporcionarle un patrón, si 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 utilícelo DateTimeFormatter
sólo 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
recuerda también que el DateTimeFormatter
objeto es bidireccional; puede analizar la entrada y formatear la salida.
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