Android以英文书面格式获取当前阿拉伯语/伊斯兰日期

时间:2017-04-19 08:51:34

标签: android date-format

我面临着找到当前伊斯兰日期的问题,我从stackoverflow搜索并找到了一些解决方案,但这些并不是我需要的确切解决方案。这是我的代码,它给我输出为الأربعاء,أبريل19,2017但我想将日期显示为“17th Jumada Al-Awwal 1438”格式。日期应该用英文写。

    Locale locale = new Locale("ar");
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM dd, yyy", locale);
    Date currDate = new Date();
    String formattedDate = sdf.format(currDate);

1 个答案:

答案 0 :(得分:2)

据我所知,除非您愿意将您的应用限制为API-level 24(并且您喜欢ICU4J的老式API风格),否则Android上没有内置的伊斯兰日历支持由IBM提供的课程;-))。但也许您可以考虑我的库Time4A,然后使用此代码(另请参阅javadoc):

ChronoFormatter<HijriCalendar> hijriFormat =
    ChronoFormatter.setUp(HijriCalendar.family(), Locale.ENGLISH)
    .addEnglishOrdinal(HijriCalendar.DAY_OF_MONTH)
    .addPattern(" MMMM yyyy", PatternType.CLDR)
    .build()
    .withCalendarVariant(HijriCalendar.VARIANT_UMALQURA);

// conversion from gregorian to hijri-umalqura valid at noon 
// (not really valid in the evening when next islamic day starts)
HijriCalendar today = 
    SystemClock.inLocalView().today().transform(
        HijriCalendar.class,
        HijriCalendar.VARIANT_UMALQURA
    );
System.out.println(hijriFormat.format(today)); // 22nd Rajab 1438

// taking into account the specific start of day for Hijri calendar
HijriCalendar todayExact = 
    SystemClock.inLocalView().now(
        HijriCalendar.family(),
        HijriCalendar.VARIANT_UMALQURA,
        StartOfDay.EVENING // simple approximation => 18:00
    ).toDate();
System.out.println(hijriFormat.format(todayExact)); // 22nd Rajab 1438 (23rd after 18:00)

关于语言支持,所有文本资源都会从CLDR-v30-data(Unicode-consortium)中取代。例如英文:“Jumada II”表示一年中的第6个月。如果您不喜欢它,您也可以提供自己的文本。格式化程序构建器有一个dedicated method来执行此操作。