Проблемы с LocalDate DateTimeFormatter - PullRequest
2 голосов
/ 20 марта 2020

Я прочитал руководства, и совершенно не понимаю, почему этот код не работает.

    // Date Entered must be valid
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy")
            .withResolverStyle(ResolverStyle.STRICT);

    try {
        String dateEntered = lossDateMonth + "/" + lossDateDay + "/" + lossDateYear; // Slash to match UI

        System.out.println(dateEntered);
        LocalDate dateParsed = LocalDate.parse(dateEntered, dateTimeFormatter);

Заявление println напечатано: 29.07.2015

В последней строке выдается исключение: java .time.format.DateTimeParseException: текст '07 / 29/2015 'не может быть проанализирован: невозможно получить LocalDate от TemporalAccessor: {YearOfEra = 2015, DayOfMonth = 29, MonthOfYear = 7} , ISO типа java .time.format.Parsed

Я прочитал руководство по этому вопросу, и в нем говорится, что такого рода вещи случаются, если вы пытаетесь разрешить несуществующую дату, например, 31 сентября. Даже в ошибке парсер, кажется, понимает, что я спрашиваю о 29 июля 2015 года, так что я здесь не так делаю?

1 Ответ

3 голосов
/ 20 марта 2020

Заменить шаблон "MM/dd/yyyy" на "MM/dd/uuuu". Загляните в DateTimeFormatter и IsoChronology . Проблема заключается в том, что при использовании .withResolverStyle(ResolverStyle.STRICT) средство форматирования ожидает уникальный идентификатор года, который предоставляется uuuu, где yyyy является годом эры . Это для строго проверки значений. Уникальность определяется тем фактом, что uuuu может быть отрицательным.

Посмотрите здесь , здесь и здесь для связанных постов .

...