如何格式Hijri日期

问题描述:

我正在使用time4A来从Islamic Hjiri to Gregorian Date进行转换,反之亦然。我无法找到将Hijri日期格式化为“yyyy/mmm/dd”模式的方法。如何格式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

所以,我怎么能格式化Hijri日期

对不起,对于迟到的答案。如果您没有得到即时答复,您也可以直接在Time4J的问题跟踪器上提问。

关于你的问题,有两点:

一)不要使用抽象接口类型,但具体类型。在这里,请用HijriCalendar替换CalendarVariant,否则由于未解决的泛型问题,您将处理原始类型。

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)。