2016-10-22 9 views
1

Я использую time4A, чтобы сделать преобразование от Islamic Hjiri to Gregorian Date и наоборот. Я не могу найти способ форматировать Hijri Дата «yyyy/mmm/dd» pattern.Как форматировать Hijri Дата

Вот код для преобразования из григорианских в Хиджру:

 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

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

ответ

0

Извините за поздний ответ. Если вы не получите немедленный ответ, вы также можете задать вопрос непосредственно на трекер проблемы 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).