diff --git a/core-java-modules/core-java-datetime-conversion/pom.xml b/core-java-modules/core-java-datetime-conversion/pom.xml
index 17b5ff62ab..f415b8a6ce 100644
--- a/core-java-modules/core-java-datetime-conversion/pom.xml
+++ b/core-java-modules/core-java-datetime-conversion/pom.xml
@@ -25,6 +25,12 @@
commons-lang3
${commons-lang3.version}
+
+ com.github.msarhan
+ ummalqura-calendar
+ ${ummalqura-calendar.version}
+
+
@@ -45,6 +51,7 @@
2.12.5
+ 2.0.2
\ No newline at end of file
diff --git a/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/gregoriantohijri/GregorianToHijriDateConverter.java b/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/gregoriantohijri/GregorianToHijriDateConverter.java
new file mode 100644
index 0000000000..022b43260c
--- /dev/null
+++ b/core-java-modules/core-java-datetime-conversion/src/main/java/com/baeldung/gregoriantohijri/GregorianToHijriDateConverter.java
@@ -0,0 +1,34 @@
+package com.baeldung.gregoriantohijri;
+
+import java.text.ParseException;
+import java.time.LocalDate;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.HijrahChronology;
+import java.time.chrono.HijrahDate;
+import java.util.GregorianCalendar;
+
+import org.joda.time.chrono.IslamicChronology;
+
+import com.github.msarhan.ummalqura.calendar.UmmalquraCalendar;
+
+public class GregorianToHijriDateConverter {
+ public static HijrahDate usingHijrahChronology(LocalDate gregorianDate) {
+ HijrahChronology hijrahChronology = HijrahChronology.INSTANCE;
+ ChronoLocalDate hijriChronoLocalDate = hijrahChronology.date(gregorianDate);
+ return HijrahDate.from(hijriChronoLocalDate);
+ }
+
+ public static HijrahDate usingFromMethod(LocalDate gregorianDate) {
+ return HijrahDate.from(gregorianDate);
+ }
+
+ public static org.joda.time.DateTime usingJodaDate(org.joda.time.DateTime gregorianDate) {
+ return gregorianDate.withChronology(IslamicChronology.getInstance());
+ }
+
+ public static UmmalquraCalendar usingUmmalquraCalendar(GregorianCalendar gregorianCalendar) throws ParseException {
+ UmmalquraCalendar hijriCalendar = new UmmalquraCalendar();
+ hijriCalendar.setTime(gregorianCalendar.getTime());
+ return hijriCalendar;
+ }
+}
diff --git a/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/gregoriantohijri/GregorianToHijriDateConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/gregoriantohijri/GregorianToHijriDateConverterUnitTest.java
new file mode 100644
index 0000000000..bc1ae8d33f
--- /dev/null
+++ b/core-java-modules/core-java-datetime-conversion/src/test/java/com/baeldung/gregoriantohijri/GregorianToHijriDateConverterUnitTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.gregoriantohijri;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.text.ParseException;
+import java.time.LocalDate;
+import java.time.chrono.HijrahDate;
+import java.time.temporal.ChronoField;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import org.joda.time.DateTime;
+import org.junit.jupiter.api.Test;
+
+import com.github.msarhan.ummalqura.calendar.UmmalquraCalendar;
+
+public class GregorianToHijriDateConverterUnitTest {
+ @Test
+ void givenGregorianDate_whenUsingHijrahChronologyClass_thenConvertHijriDate() {
+ LocalDate gregorianDate = LocalDate.of(2013, 3, 31);
+ HijrahDate hijriDate = GregorianToHijriDateConverter.usingHijrahChronology(gregorianDate);
+ assertEquals(1434, hijriDate.get(ChronoField.YEAR));
+ assertEquals(5, hijriDate.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(19, hijriDate.get(ChronoField.DAY_OF_MONTH));
+ }
+
+ @Test
+ void givenGregorianDate_whenUsingFromMethod_thenConvertHijriDate() {
+ LocalDate gregorianDate = LocalDate.of(2013, 3, 31);
+ HijrahDate hijriDate = GregorianToHijriDateConverter.usingFromMethod(gregorianDate);
+ assertEquals(1434, hijriDate.get(ChronoField.YEAR));
+ assertEquals(5, hijriDate.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(19, hijriDate.get(ChronoField.DAY_OF_MONTH));
+ }
+
+ @Test
+ void givenGregorianDate_whenUsingJodaDate_thenConvertHijriDate() {
+ DateTime gregorianDate = new DateTime(2013, 3, 31, 0, 0, 0);
+ DateTime hijriDate = GregorianToHijriDateConverter.usingJodaDate(gregorianDate);
+ assertEquals(1434, hijriDate.getYear());
+ assertEquals(5, hijriDate.getMonthOfYear());
+ assertEquals(19, hijriDate.getDayOfMonth());
+ }
+
+ @Test
+ void givenGregorianDate_whenUsingUmmalquraCalendar_thenConvertHijriDate() throws ParseException {
+ GregorianCalendar gregorianCalendar = new GregorianCalendar(2013, Calendar.MARCH, 31);
+ UmmalquraCalendar ummalquraCalendar = GregorianToHijriDateConverter.usingUmmalquraCalendar(gregorianCalendar);
+ assertEquals(1434, ummalquraCalendar.get(Calendar.YEAR));
+ assertEquals(5, ummalquraCalendar.get(Calendar.MONTH) + 1);
+ assertEquals(19, ummalquraCalendar.get(Calendar.DAY_OF_MONTH));
+ }
+}