Mon entrée est une représentation sous forme de chaîne d'une date au format "01-07-2015" pour le 1er juillet 2015. J'essaie d'analyser ceci dans un Java.time.LocalDate
variable:
final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-YYYY");
final String input = "01-07-2015";
final LocalDate localDate = LocalDate.parse(input, DATE_FORMAT);
Basé sur le DateTimeFormatter
JavaDoc , je m'attendrais à ce que cela fonctionne. Cependant, je suis accueilli par un message très amical et utile:
Causée par: Java.time.DateTimeException: impossible d'obtenir LocalDate de TemporalAccessor: {DayOfMonth = 1, MonthOfYear = 7, WeekBasedYear [WeekFields [MONDAY, 4]] = 2015}, ISO de type Java.time.format.Parsed
Je ne comprends pas vraiment ce que cette exception me dit. Quelqu'un peut-il m'expliquer ce qui ne va pas?
Pour l'année, vous devez utiliser le y minuscule:
final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy");
Y majuscule est utilisé pour la semaine. Voir javadoc de DateTimeFormatter pour plus de détails.
La réponse à la question est d'utiliser "y" et non "Y".
Pour expliquer le message d'erreur, décomposons-le:
Unable to obtain LocalDate from TemporalAccessor
Cela signifie qu'il ne peut pas créer un LocalDate
(ce qui a été demandé) à partir d'un TemporalAccessor
(l'interface de bas niveau qui fournit un accès de type hashmap aux champs de date/heure).
of type Java.time.format.Parsed
Cela signifie que l'objet passé dans la méthode était de type Java.time.format.Parsed
. Il s'agit du type d'analyse de sortie standard et contient toutes les informations analysées.
{DayOfMonth=1, MonthOfYear=7, WeekBasedYear[WeekFields[MONDAY,4]]=2015},ISO
Il s'agit de la forme toString()
de l'objet Java.time.format.Parsed
Résultant de l'analyse. Il dit que quatre choses ont été analysées:
DayOfMonth=1
, Le jour du mois analysé avec la valeur de 1
MonthOfYear=7
, Le mois de l'année analysé avec la valeur de 7
WeekBasedYear[WeekFields[MONDAY,4]]=2015
, L'année de la semaine analysée avec la valeur de 2015
ISO
, qui est le système de calendrier ISO (une valeur par défaut)Puisqu'il n'est pas possible de produire un LocalDate
à partir de la combinaison DayOfMonth + MonthOfYear + WeekBasedYear, une exception est levée.
Notez que la partie [WeekFields[MONDAY,4]]
Fait référence au fait qu'il existe de nombreuses façons différentes de définir une semaine, dans les semaines américaines commencent le dimanche, mais dans la norme ISO et l'UE, elles commencent le lundi.