Désolé pour la réponse tardive. Si vous n'obtenez pas de réponse immédiate, vous pouvez également poser la question directement sur le tracker de Time4J.
A propos de votre question, deux points:
a) Ne pas utiliser les types d'interface abstraites mais les types de béton. Ici, remplacez CalendarVariant
par HijriCalendar, sinon vous allez gérer un type brut en raison de génériques non résolus.
b) La classe de formateur ChronoFormatter
peut gérer la mise en forme (et l'analyse également). Vous avez seulement besoin de le nourrir avec les informations suivantes: chaîne de modèle, type de modèle, paramètres régionaux et chronologie. Il est également immuable et peut être stocké dans une constante finale statique. Exemple:
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
L'exemple donné utilise simplement les paramètres régionaux racine car vous ne souhaitez obtenir qu'une représentation numérique à l'aide de chiffres standard. Mais bien sûr, vous pouvez avoir une représentation formatée en utilisant d'autres systèmes numériques si vous le souhaitez (les paramètres régionaux sont importants, ou vous pouvez même définir un explicit format attribute).