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

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

Итак, как я могу отформатировать Дата хиджры?


person abdou amer    schedule 22.10.2016    source источник


Ответы (1)


Извини за поздний ответ. Если вы не получили немедленного ответа, вы также можете задать вопрос непосредственно в системе отслеживания проблем Time4J.

Что касается вашего вопроса, два момента:

а) Используйте не абстрактные типы интерфейсов, а конкретные типы. Здесь замените CalendarVariant на HijriCalendar, иначе вы будете обрабатывать необработанный тип из-за неразрешенных дженериков.

б) Класс форматирования ChronoFormatter может обрабатывать форматирование (а также синтаксический анализ). Вам нужно только передать ему следующую информацию: строку шаблона, тип шаблона, локаль и хронологию. Он также неизменяем и может храниться в статической константе final. Пример:

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

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

person Meno Hochschild    schedule 05.12.2016