Search code examples
datejava-8java-timehijri

How can i convert Gregorain year to Hijri year?


I want to convert Gregorian date to Hijri date in java 8 using HijrahChronology library. I've tried the codes below but don't work accurately.

  Date date = new Date(); // Gregorian date
  Calendar cl=Calendar.getInstance();
  cl.set(Calendar.YEAR, date.getYear());

  HijrahDate islamyDate = HijrahChronology.INSTANCE.date(LocalDate.of(cl.get(Calendar.YEAR),cl.get(Calendar.MONTH)+1, cl.get(Calendar.DATE)));
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("uuuu");
        String gregorianString = "1994";
        LocalDate gregorianDate = LocalDate.parse(gregorianString, dateFormatter);
        HijrahDate islamicDate = HijrahDate.from(gregorianDate);
        System.out.println("Islamic date: " + islamicDate);

Update: I want to convert only the year part.


Solution

  • You can simply pass a TemporalAccessor e.g. LocalDate, ZonedDateTime etc. to HijrahChronology.INSTANCE#date as shown below:

    import java.time.LocalDate;
    import java.time.Month;
    import java.time.ZoneId;
    import java.time.chrono.HijrahChronology;
    import java.time.chrono.HijrahDate;
    import java.time.temporal.TemporalAdjusters;
    
    public class Main {
        public static void main(String[] args) {
            // Change the time-zone as per your requirement.
            ZoneId myZoneId = ZoneId.of("Etc/UTC");
    
            HijrahDate hijrahDate1 = HijrahChronology.INSTANCE.date(LocalDate.now(myZoneId));
            System.out.println(hijrahDate1);
    
            // ########Another example########
    
            // HijrahDate on the last day of January 1994 at the time zone of Etc/UTC
            HijrahDate hijrahDate2 = HijrahChronology
                    .INSTANCE                                   // Instance of HijrahChronology
                    .date(LocalDate.of(1994, Month.JANUARY, 1)  // LocalDate of 01-Jan-1994
                    .with(TemporalAdjusters.lastDayOfMonth())   // On the last day of Jan-1994
                    .atStartOfDay()                             // At the start of the day i.e. 00:00
                    .atZone(myZoneId));                         // At the time zone of Etc/UTC
            System.out.println(hijrahDate2);
        }
    }
    

    Output:

    Hijrah-umalqura AH 1441-12-27
    Hijrah-umalqura AH 1414-08-19
    

    Learn more about the Java-8 date-time API at Trail: Date Time.