Я пытаюсь проанализировать текст, представляющий значение LocalDate
, с IsoField.QUARTER_OF_YEAR
, используя DateTimeFormatter
, возвращаемое методом DateTimeFormatterBuilder#buildFormatter()
.
Проблемный текст: «20 октября 2018 г., Q2».Квартальное значение («Q2»), по общему признанию, неверно для обычного календарного года, здесь «2018».Однако я работаю с финансовым годом, который заканчивается 30 июня, поэтому дата «20 октября 2018 года» будет во втором квартале финансового года.
Модуль форматирования построен со следующим кодом:
TemporalQuery<LocalDate> query = LocalDate::from;
String pattern = “d MMM uuuu qqq”;
Locale locale = Locale.forLanguageTag("en-US");
TemporalField tf = IsoFields.QUARTER_OF_YEAR;
Map<Long, String> m = new Hashtable<>();
m.put(4L, “Q2”);
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(pattern)
.appendText(tf, m)
.toFormatter(locale);
TemporalAccessor value = formatter.parse(text, query)
Попытки разобрать генерируют DateTimeParseException
с сообщением об ошибке: «Текст '20 Oct 2018 Q2 'не может быть проанализирован с индексом 0»
Я пытался изменить порядок вкоторые вызываются parseCaseInsensitive()
… appendText()
.Исключение по-прежнему выдается, хотя указанный индекс равен 14 в одном из вариантов.
Возможная причина проблемы: метод DateTimeFormatterBuilder # appendText (TemporalField, Map) может работать только в операциях форматирования, но не для анализакак здесь.
Заранее спасибо за любые идеи или помощь!