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