Как форматировать дату хиджры
Я использую time4A, чтобы сделать преобразование из Islamic Hjiri to Gregorian Date
и наоборот. Я не могу найти способ отформатировать дату Хиджры в "yyyy/mmm/dd
" шаблон.
Вот код для преобразования из григорианского в хиджры:
CalendarVariant variant =
PlainDate.of(2016, 02, 12)
.transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA);
System.out.println(variant.toString());
Я получил это AH-1437-05-03[islamique-umalqura]
Мне нужно что-то вроде: 1437-05-03
Итак, как я могу отформатировать хиджры Дата?
1 ответ
Извини за поздний ответ. Если вы не получили немедленного ответа, вы также можете задать вопрос непосредственно на трекере проблем Time4J.
О вашем вопросе два момента:
а) Не используйте абстрактные типы интерфейса, а конкретные типы. Здесь замени CalendarVariant
HijriCalendar, в противном случае вы будете обрабатывать необработанный тип из-за неразрешенных обобщений.
б) класс форматера 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
Данный пример просто использует корневую локаль, потому что вам нужны только числовые представления с использованием стандартных цифр. Но, конечно, вы можете иметь отформатированное представление, используя другие числовые системы, если хотите (тогда языковой стандарт имеет значение, или вы даже устанавливаете явный атрибут формата).