manejo - No se puede analizar la cadena a LocalDate(Java 8)
manejo de fecha java 8 (2)
La respuesta a la pregunta es usar ''y'' no ''Y''.
Para explicar el mensaje de error, vamos a descomponerlo:
Unable to obtain LocalDate from TemporalAccessor
Esto significa que no puede crear una LocalDate
(lo que se solicitó) desde un LocalDate
TemporalAccessor
(la interfaz de bajo nivel que proporciona acceso similar a un hashmap a los campos de fecha / hora).
of type java.time.format.Parsed
Esto significa que el objeto pasado al método fue de tipo java.time.format.Parsed
. Este es el tipo de salida estándar de análisis y contiene toda la información que se analizó.
{DayOfMonth=1, MonthOfYear=7, WeekBasedYear[WeekFields[MONDAY,4]]=2015},ISO
Esta es la forma toString()
del objeto java.time.format.Parsed
que resultó del análisis. Es decir que se analizaron cuatro cosas:
-
DayOfMonth=1
, el día del mes analizado con valor de1
-
MonthOfYear=7
, el mes del año analizado con un valor de7
-
WeekBasedYear[WeekFields[MONDAY,4]]=2015
, el año semanal analizado con el valor de2015
-
ISO
, que es el sistema de calendario ISO (un valor predeterminado)
Dado que no es posible producir una LocalDate
partir de la combinación DayOfMonth + MonthOfYear + WeekBasedYear, se lanza una excepción.
Tenga en cuenta que la parte [WeekFields[MONDAY,4]]
refiere al hecho de que hay muchas maneras diferentes de definir una semana, en las semanas de EE. UU. Inician el domingo, pero en la norma ISO y la UE comienzan el lunes.
Mi entrada es una representación de cadena de una fecha en el formato "01-07-2015" para el 1 de julio de 2015. Estoy tratando de analizar esto en una variable java.time.LocalDate
:
final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-YYYY");
final String input = "01-07-2015";
final LocalDate localDate = LocalDate.parse(input, DATE_FORMAT);
Según el DateTimeFormatter
JavaDoc , espero que esto funcione. Sin embargo, me saludan con un mensaje muy amigable y útil:
Causado por: java.time.DateTimeException: No se puede obtener LocalDate de TemporalAccessor: {DayOfMonth = 1, MonthOfYear = 7, WeekBasedYear [WeekFields [MONDAY, 4]] = 2015}, ISO de tipo java.time.format.Parsed
Realmente no entiendo lo que me dice esta excepción. ¿Alguien puede explicarme qué está mal?
Por año tienes que usar la minúscula y:
final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy");
Y mayúscula se utiliza para weekyear. Vea el javadoc de DateTimeFormatter para más detalles.