将公历转换为回历日期

我想从公历转换为回历(伊斯兰)日期,我需要一个java类进行此转换。我想给它一个公历日期,格式为“yyyy/mm/dd”作为字符串,它以相同的格式给我回历日期。任何人都可以帮助我吗?


答案 1

首先,将转换部分与格式化/解析部分分开。你以后可以很容易地处理这些问题 - Stack Overflow上有很多关于这个问题的问题。

就我个人而言,我会使用Joda Time,这通常会使生活变得更加简单。例如:

import org.joda.time.Chronology;
import org.joda.time.LocalDate;
import org.joda.time.chrono.IslamicChronology;
import org.joda.time.chrono.ISOChronology;

public class Test {
    public static void main(String[] args) throws Exception {
        Chronology iso = ISOChronology.getInstanceUTC();
        Chronology hijri = IslamicChronology.getInstanceUTC();

        LocalDate todayIso = new LocalDate(2013, 3, 31, iso);
        LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(),
                                             hijri);
        System.out.println(todayHijri); // 1434-05-19
    }
} 

(感觉应该有一种更清晰的方式在年表之间转换日期,但我无法立即找到一个。


答案 2

Java 8 是支持 Hejrah Date 的内置功能

例:

import java.time.*;
import java.time.chrono.HijrahChronology;

Date date = new Date(); // Gregorian date

Calendar cl=Calendar.getInstance();
cl.setTime(date);
    
HijrahDate islamyDate = HijrahChronology.INSTANCE.date(LocalDate.of(cl.get(Calendar.YEAR),cl.get(Calendar.MONTH)+1, cl.get(Calendar.DATE))); 
//OUTPUT: Hijrah-umalqura AH 1436-02-03