You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何获取印度地区的希吉拉(Hijrah)日期

获取印度地区的希吉拉(Hijrah)日期解决方案

默认的HijrahDate.now()使用的是沙特阿拉伯的Ummul Qura历法,而印度地区的希吉拉日期遵循的是印度伊斯兰历(基于本地望月观测,部分日期会和沙特版本差1-2天),Java/Android标准库未直接提供该历法的支持,需要借助ICU4J库来实现。

步骤1:添加ICU4J依赖

在Module级别的build.gradle文件中添加依赖:

dependencies {
    implementation 'com.ibm.icu:icu4j:74.1'
}

步骤2:修改代码获取印度希吉拉日期

替换原有的getHijriDate()方法,使用ICU的IslamicCalendar类指定印度历法变体:

@RequiresApi(Build.VERSION_CODES.O)
private fun getIndianHijriDate() {
    bindAddSalahTime.islamicDateLl.visibility = View.VISIBLE
    
    // 初始化印度伊斯兰历实例
    val indianIslamicCalendar = com.ibm.icu.util.IslamicCalendar().apply {
        setCalendarType("islamic-india")
        time = Date()
    }
    
    // 格式化日期为dd-MMMM-yyyy格式
    val dateFormatter = com.ibm.icu.text.DateFormat.getDateInstance(DateFormat.LONG, Locale.ENGLISH).apply {
        calendar = indianIslamicCalendar
    }
    val formattedDate = dateFormatter.format(indianIslamicCalendar.time)
    
    // 提取月份数字并插入指定位置(和原逻辑保持一致)
    val monthNum = indianIslamicCalendar.get(Calendar.MONTH) + 1 // ICU月份从0开始,需加1转为1-12
    val finalDateStr = StringBuilder(formattedDate).insert(formattedDate.length - 5, "($monthNum)")
    
    bindAddSalahTime.islamicDateTv.text = finalDateStr
}

关键说明

  • setCalendarType("islamic-india"):明确指定使用印度伊斯兰历变体,ICU还支持沙特(islamic-umalqura)、埃及等其他伊斯兰历变体
  • 月份数字处理:ICU的Calendar.MONTH索引从0开始,因此需要加1转换为1-12的常规月份格式

内容的提问来源于stack exchange,提问作者Mohd Qasim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:42:50