Как я могу преобразовать год григорейна в год хиджры?

Я хочу преобразовать григорианскую дату в дату хиджры в java 8, используя библиотеку HijrahChronology. Я пробовал приведенные ниже коды, но они не работают точно.

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

Обновление: я хочу преобразовать только часть года.


person user2340345    schedule 17.08.2020    source источник
comment
Отвечает ли это на ваш вопрос? преобразование григорианского языка в дату хиджры   -  person mohammedkhan    schedule 17.08.2020
comment
@mohammedkhan - ни один из ответов в вашей ссылке не использует современный java.time API. Либо они основаны на Joda Time API, либо на устаревшем и подверженном ошибкам устаревшем java.util API.   -  person Arvind Kumar Avinash    schedule 17.08.2020
comment
@ArvindKumarAvinash, второй ответ: stackoverflow.com/a/27120886/3415090   -  person mohammedkhan    schedule 17.08.2020
comment
@mohammedkhan - Как я упоминал ранее, ответ, на который вы указываете, - это смешивание подверженного ошибкам устаревшего API java.util с умным современным API java.time. Следует полностью прекратить использование плохо разработанного java.util API.   -  person Arvind Kumar Avinash    schedule 17.08.2020
comment
@ArvindKumarAvinash согласился, что ответ не идеален. Ваш комментарий звучал так, как будто ни один из ответов не использовал java.time.*, что было не совсем точным, но, как вы говорите, это излишне смешивается с java.util.Calendar. Учитывая, что этот вопрос такой же, как этот, и старше, я бы порекомендовал вам добавить свой ответ ниже и на этот вопрос.   -  person mohammedkhan    schedule 17.08.2020


Ответы (1)


Вы можете просто передать TemporalAccessor, например. LocalDate, ZonedDateTime и т. д. в HijrahChronology.INSTANCE#date, как показано ниже:

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);
    }
}

Вывод:

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

Узнайте больше об API даты и времени Java-8 на странице Trail: Date Время.

person Arvind Kumar Avinash    schedule 17.08.2020