Извините за поздний ответ. Если вы не получите немедленный ответ, вы также можете задать вопрос непосредственно на трекер проблемы Time4J.
О вашем вопросе, две точки:
а) Не использовать абстрактные типы интерфейсов, но конкретные типы. Здесь замените CalendarVariant
на HijriCalendar, иначе вы будете обрабатывать сырой тип из-за неразрешенных дженериков.
b) Класс форматирования ChronoFormatter
может обрабатывать форматирование (а также синтаксический анализ). Вам нужно только прокормить его следующей информацией: строка шаблона, тип паттерна, язык и хронология. Он также неизменен и может храниться в статической конечной константе. Пример:
HijriCalendar hijriDate =
PlainDate.of(2016, 02, 12).transform(
HijriCalendar.class,
HijriCalendar.VARIANT_UMALQURA
);
ChronoFormatter<HijriCalendar> hf =
ChronoFormatter.ofPattern(
"yyyy-MM-dd", // mmm as given by you would be in minutes in CLDR-standard
PatternType.CLDR,
Locale.ROOT,
HijriCalendar.family()
);
System.out.println(hf.format(hijriDate)); // 1437-05-03
Данный пример использует только корневой локаль, потому что вы хотите только числовые представления, используя стандартные цифры. Но, конечно, вы можете иметь форматированное представление, используя другие числовые системы, если хотите (тогда имеет значение языковой стандарт, или вы даже установите explicit format attribute).