Как форматировать дату хиджры

Я использую 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

Данный пример просто использует корневую локаль, потому что вам нужны только числовые представления с использованием стандартных цифр. Но, конечно, вы можете иметь отформатированное представление, используя другие числовые системы, если хотите (тогда языковой стандарт имеет значение, или вы даже устанавливаете явный атрибут формата).

Другие вопросы по тегам