Невозможно получить LocalDate от TemporalAccessor, используя кварталы - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь разобрать некоторую строку даты в значение даты, однако, используя приведенный ниже код, я получаю исключение:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Q'Q'uuuu - MMM");

String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));

Исключение составляет ниже

java.time.format.DateTimeParseException: Text '3Q2016 - Aug' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=8, QuarterOfYear=3, Year=2016},ISO of type java.time.format.Parsed

Глядя на исключение, я вижу правильные данные, но по какой-то причине их невозможно проанализировать.

Другие похожие темы, которые я вижу, предлагают использовать LocalDate или LocalDateTime, но ни одна из них не работает.

Ответы [ 3 ]

5 голосов
/ 20 марта 2019

Это потому, что указанная строка не имеет конкретной даты для выбора.Возможно, вам нужно использовать YearMonth вместо LocalDateTime, а затем преобразовать его, используя YearMonth.atDay(1), чтобы получить первый день месяца.

3 голосов
/ 21 марта 2019

Как сказано в в этом ответе , вам нужно указать день, чтобы можно было выполнить синтаксический анализ LocalDate.Таким образом, одно решение - вместо этого проанализировать YearMonth и преобразовать в LocalDate, указав день после этого.

Или вы создаете DateTimeFormatter с фиксированным днем ​​в первую очередь:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("Q'Q'uuuu - MMM")
    .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
    .toFormatter(Locale.US);
String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));

Я использовал toFormatter(Locale.US), чтобы пример работал во всех средах.В среде, где входная строка соответствует текущей локали, вы можете использовать toFormatter().

0 голосов
/ 20 марта 2019

Попробуйте добавить часть времени к дате -

String str = "2Q1986 - Apr - 08 T00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Q'Q'yyyy - MMM - dd 'T'hh:mm");
LocalDate dateTime = LocalDate.parse(str, formatter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...