Code Monkey home page Code Monkey logo

ummalqura-calendar's Introduction

Build Status Javadoc License Maven Central Supported JVM Versions

ummalqura-calendar

Implementation of java.util.Calendar for the Umm Al-Qura calendar system. Calculation used in version 2.x was derived from Java 8. This calculation is valid from 1300H to 1600H.

Table of contents

Installation

<dependency>
  <groupId>com.github.msarhan</groupId>
  <artifactId>ummalqura-calendar</artifactId>
  <version>[VERSION]</version>
</dependency>

Usage

// Suppose current gregorian data/time is: Fri Apr 03 18:12:38 AST 2015
UmmalquraCalendar cal = new UmmalquraCalendar();
cal.get(Calendar.YEAR);         // 1436
cal.get(Calendar.MONTH);        // 5 <=> Jumada al-Akhirah
cal.get(Calendar.DAY_OF_MONTH); // 14

Using parametrized constructors

Calendar cal = new UmmalquraCalendar(1436, UmmalquraCalendar.SHAABAN, 11);
cal.getTime(); // Fri May 29 00:00:00 AST 2015
Calendar cal = new UmmalquraCalendar(1436, UmmalquraCalendar.SHAABAN, 11, 18, 12, 38);
cal.getTime(); // Fri May 29 18:12:38 AST 2015

Get + Set

Calendar cal = new UmmalquraCalendar();
cal.set(Calendar.YEAR, 1436);
cal.set(Calendar.MONTH, UmmalquraCalendar.SHAABAN);
cal.set(Calendar.DAY_OF_MONTH, 11);

cal.getTime(); // Fri May 29 20:57:37 AST 2015
Calendar cal = new UmmalquraCalendar(1436, UmmalquraCalendar.SHAABAN, 11);
cal.get(Calendar.YEAR);         // 1436
cal.get(Calendar.MONTH);        // 7
cal.get(Calendar.DAY_OF_MONTH); // 11

Get month length in days

Calendar cal = new UmmalquraCalendar(1437, UmmalquraCalendar.MUHARRAM, 1);
cal.lengthOfMonth();                                               // 30
// Or using static version:
UmmalquraCalendar.lengthOfMonth(1437, UmmalquraCalendar.MUHARRAM); // 30
UmmalquraCalendar.lengthOfMonth(1437, UmmalquraCalendar.SAFAR);    // 29

Get year length in days

Calendar cal = new UmmalquraCalendar(1437, UmmalquraCalendar.MUHARRAM, 1);
cal.lengthOfYear();                   // 354
// Or using static version:
UmmalquraCalendar.lengthOfYear(1435); // 355	'Leap year'
UmmalquraCalendar.lengthOfYear(1436); // 354
UmmalquraCalendar.lengthOfYear(1437); // 354

Read month or week day name in a given style and java.util.Locale.

Calendar cal = new UmmalquraCalendar(1436, UmmalquraCalendar.RABI_THANI, 21);

cal.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH);         // Rab-II
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH);          // Rabi' al-Thani

cal.getDisplayName(Calendar.MONTH, Calendar.SHORT, new Locale("ar"));       // ربيع 2
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar"));        // ربيع الثاني

cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.ENGLISH);   // Tue
cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH);    // Tuesday

cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ar")); // ث
cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, new Locale("ar"));  // الثلاثاء

Read month or week day names as a java.util.Map in a given style and java.util.Locale. Where entry key will be the field name and entry value will be the corresponding field value.

Calendar cal = new UmmalquraCalendar();

cal.getDisplayNames(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH);
//{Thul-Q=10, Rab-I=2, Saf=1, Shw=9, Muh=0, Thul-H=11, Sha=7, Rab-II=3, Raj=6, Ram=8, Jum-I=4, Jum-II=5}
cal.getDisplayNames(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH);
//{Ramadhan=8, Rajab=6, Jumada al-Ula=4, Thul-Qi'dah=10, Sha'ban=7, Muharram=0, Safar=1, Thul-Hijjah=11, Shawwal=9, Rabi' al-Awwal=2, Jumada al-Akhirah=5, Rabi' al-Thani=3}

cal.getDisplayNames(Calendar.MONTH, Calendar.SHORT, new Locale("ar"));
//{جمادى 2=5, رمضان=8, جمادى 1=4, ربيع 2=3, ذو القعدة=10, صفر=1, محرم=0, رجب=6, ربيع 1=2, شوال=9, شعبان=7, ذو الحجة=11}
cal.getDisplayNames(Calendar.MONTH, Calendar.LONG, new Locale("ar"));
//{جمادى الآخرة=5, رمضان=8, ذو القعدة=10, صفر=1, محرم=0, رجب=6, ربيع الثاني=3, جمادى الأولى=4, شوال=9, شعبان=7, ربيع الأول=2, ذو الحجة=11}

cal.getDisplayNames(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.ENGLISH);
//{Thu=5, Wed=4, Sun=1, Sat=7, Fri=6, Tue=3, Mon=2}
cal.getDisplayNames(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.ENGLISH);
//{Saturday=7, Thursday=5, Monday=2, Tuesday=3, Wednesday=4, Friday=6, Sunday=1}

cal.getDisplayNames(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ar"));
//{خ=5, ج=6, ح=1, ث=3, س=7, ر=4, ن=2}
cal.getDisplayNames(Calendar.DAY_OF_WEEK, Calendar.LONG, new Locale("ar"));
//{الاثنين=2, الخميس=5, الجمعة=6, الأربعاء=4, الثلاثاء=3, الأحد=1, السبت=7}

Conversion

From Gregorian to Ummalqura

GregorianCalendar gCal = new GregorianCalendar(2012, Calendar.FEBRUARY, 12);
Calendar uCal = new UmmalquraCalendar();
uCal.setTime(gCal.getTime());

uCal.get(Calendar.YEAR);         // 1433
uCal.get(Calendar.MONTH);        // 2
uCal.get(Calendar.DAY_OF_MONTH); // 20

uCal.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH);

From Ummalqura to Gregorian

Calendar uCal = new UmmalquraCalendar(1433, UmmalquraCalendar.RABI_AWWAL, 15);
GregorianCalendar gCal = new GregorianCalendar();
gCal.setTime(uCal.getTime());

gCal.get(Calendar.YEAR);         // 2012
gCal.get(Calendar.MONTH);        // 1
gCal.get(Calendar.DAY_OF_MONTH); // 7

Formatting

You can use java.text.SimpleDateFormat to format Ummalqura date.

Format using English locale

Calendar uCal = new UmmalquraCalendar(1433, UmmalquraCalendar.RABI_AWWAL, 8, 20, 45, 10);
SimpleDateFormat dateFormat = new SimpleDateFormat("", Locale.ENGLISH);
dateFormat.setCalendar(uCal);

dateFormat.applyPattern("d");
dateFormat.format(uCal.getTime()); // 8

dateFormat.applyPattern("dd");
dateFormat.format(uCal.getTime()); // 08

dateFormat.applyPattern("E");
dateFormat.format(uCal.getTime()); // Tue

dateFormat.applyPattern("EEEE");
dateFormat.format(uCal.getTime()); // Tuesday

dateFormat.applyPattern("M");
dateFormat.format(uCal.getTime()); // 3

dateFormat.applyPattern("MM");
dateFormat.format(uCal.getTime()); // 03

dateFormat.applyPattern("MMM");
dateFormat.format(uCal.getTime()); // Rab-I

dateFormat.applyPattern("MMMM");
dateFormat.format(uCal.getTime()); // Rabi' al-Awwal

dateFormat.applyPattern("y");
dateFormat.format(uCal.getTime()); // 1433

dateFormat.applyPattern("yy");
dateFormat.format(uCal.getTime()); // 33

dateFormat.applyPattern("EEEE d MMMM, y");
dateFormat.format(uCal.getTime()); // Tuesday 8 Rabi' al-Awwal, 1433

dateFormat.applyPattern("y/MM/dd");
dateFormat.format(uCal.getTime()); // 1433/03/08

dateFormat.applyPattern("y/MM/dd hh:mm a");
dateFormat.format(uCal.getTime()); // 1433/03/08 08:45 PM

Format using Arabic locale

Calendar uCal = new UmmalquraCalendar(1433, UmmalquraCalendar.RABI_AWWAL, 8, 20, 45, 10);
SimpleDateFormat dateFormat = new SimpleDateFormat("", new Locale("ar"));
dateFormat.setCalendar(uCal);

dateFormat.applyPattern("E");
dateFormat.format(uCal.getTime()); // ث

dateFormat.applyPattern("EEEE");
dateFormat.format(uCal.getTime()); // الثلاثاء

dateFormat.applyPattern("MMM");
dateFormat.format(uCal.getTime()); // ربيع 1

dateFormat.applyPattern("MMMM");
dateFormat.format(uCal.getTime()); // ربيع الأول

dateFormat.applyPattern("EEEE d MMMM, y");
dateFormat.format(uCal.getTime()); // الثلاثاء 8 ربيع الأول, 1433

Parsing

You can use java.text.SimpleDateFormat to parse Ummalqura date.

Parse using English locale

Locale en = Locale.ENGLISH;
UmmalquraCalendar uCal = new UmmalquraCalendar(en);

SimpleDateFormat dateFormat = new SimpleDateFormat("", en);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
dateFormat.setCalendar(uCal);
uCal.set(Calendar.YEAR, 1420);                  // Used to properly format 'yy' pattern
dateFormat.set2DigitYearStart(uCal.getTime());  // Used to properly format 'yy' pattern

Calendar cal = new UmmalquraCalendar(en);

dateFormat.applyPattern("d/M/y");
cal.setTime(dateFormat.parse("4/7/1435"));
cal.get(Calendar.YEAR);                                      // 1435
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, en);       // Rajab
cal.get(Calendar.DAY_OF_MONTH);                              // 4

dateFormat.applyPattern("MMMM d, y");
cal.setTime(dateFormat.parse("Jumada al-Ula 10, 1436"));
cal.get(Calendar.YEAR);                                      // 1436
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, en);       // Jumada al-Ula
cal.get(Calendar.DAY_OF_MONTH);                              // 10

dateFormat.applyPattern("EEEE, MMMM dd, y");
cal.setTime(dateFormat.parse("Saturday, Sha'ban 07, 1434"));
cal.get(Calendar.YEAR);                                      // 1434
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, en);       // Sha'ban
cal.get(Calendar.DAY_OF_MONTH);                              // 7

dateFormat.applyPattern("EEEE, MMMM d, yy hh:mm:ss");
cal.setTime(dateFormat.parse("Saturday, Jumada al-Ula 23, 36 12:19:44"));
cal.get(Calendar.YEAR);                                      // 1436
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, en);       // Jumada al-Ula
cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, en); // Saturday
cal.get(Calendar.DAY_OF_MONTH);                              // 23

Parse using Arabic locale

Locale ar = new Locale("ar");
UmmalquraCalendar uCal = new UmmalquraCalendar(ar);

SimpleDateFormat dateFormat = new SimpleDateFormat("", ar);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
dateFormat.setCalendar(uCal);
// Used to properly format 'yy' pattern for dates in 14th century
uCal.set(Calendar.YEAR, 1400);
dateFormat.set2DigitYearStart(uCal.getTime());

Calendar cal = new UmmalquraCalendar(ar);

dateFormat.applyPattern("d/M/y");
cal.setTime(dateFormat.parse("4/7/1435");
cal.get(Calendar.YEAR);                                      // 1435
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, ar);       // رجب
cal.get(Calendar.DAY_OF_MONTH);                              // 4

dateFormat.applyPattern("MMMM d, y");
cal.setTime(dateFormat.parse("جمادى الأولى 10, 1436"));
cal.get(Calendar.YEAR);                                      // 1436
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, ar);       // جمادى الأولى
cal.get(Calendar.DAY_OF_MONTH);                              // 10

dateFormat.applyPattern("EEEE, MMMM dd, y");
cal.setTime(dateFormat.parse("السبت, شعبان 07, 1434"));
cal.get(Calendar.YEAR);                                      // 1434
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, ar);       // شعبان
cal.get(Calendar.DAY_OF_MONTH);                              // 7

dateFormat.applyPattern("EEEE, MMMM d, yy hh:mm:ss");
cal.setTime(dateFormat.parse("السبت, جمادى الأولى 23, 36 12:19:44"));
cal.get(Calendar.YEAR);                                      // 1436
cal.getDisplayName(Calendar.MONTH, Calendar.LONG, ar);       // جمادى الأولى
cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, ar); // السبت
cal.get(Calendar.DAY_OF_MONTH);                              // 23

Localization: Add support for additional locales

Currently, ummalqura-calendar supports the following locales: Arabic, English and French. You can add another locale by creating properties file with the following aspects:

  • It should be named UmmalquraFormatData_[LOCALE].properties, where [LOCALE] should be a language tag. e.g. tr, zh_CN
  • It should be placed in com.github.msarhan.ummalqura.calendar.text package and add it to the classpath.

As an example, French locale has been added as a properties file.

Please note that if properties file contains special characters that cannot be represented in ISO-8859-1 encoding; it must be encoded by unicode escapes in the form \uXXXX.

ummalqura-calendar's People

Contributors

alhazmy13 avatar dependabot[bot] avatar m7mdyahia avatar msarhan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ummalqura-calendar's Issues

Gradle Support

Salam,
Could you add Gradle support to this awesome library?

formatter outputs Gregorian months on Android

Running the examples in the README outputs Gregorian months from a SimpleDateFormatter. Compiling for Android with target API 23.

Calendar cal = new UmmalquraCalendar(1433, UmmalquraCalendar.RABI_AWWAL, 8, 20, 45, 10);
SimpleDateFormat sdf = new SimpleDateFormat("MMMM", Locale.ENGLISH);
sdf.setCalendar(cal);
Log.d(LOG_LABEL, "calendar month: " + sdf.getCalendar().getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH));
Log.d(LOG_LABEL, "formatted month: " + sdf.format(cal.getTime()));
Log.d(LOG_LABEL, "calendar getTime: " + cal.getTime());
sdf.applyPattern("EEEE d MMMM, y");
Log.d(LOG_LABEL, "formatted full date: " + sdf.format(cal.getTime()));
sdf.applyPattern("EEEE d MMM, y");
Log.d(LOG_LABEL, "with shortened month: " + sdf.format(cal.getTime()));
sdf.applyPattern("y/MM/dd hh:mm a");
Log.d(LOG_LABEL, "short form: " + sdf.format(cal.getTime()));

outputs:

calendar month: Rabi' al-Awwal
formatted month: March
calendar getTime: Tue Jan 31 20:45:10 EST 2012
formatted full date: Tuesday 8 March, 1433
with shortened month: Tuesday 8 Mar, 1433
short form: 1433/03/08 08:45 PM

Initializing instead with the current date and time:
Calendar cal = UmmalquraCalendar.getInstance();
outputs in all Gregorian:

calendar month: June
formatted month: June
calendar getTime: Tue Jun 21 11:49:18 EDT 2016
formatted full date: Tuesday 21 June, 2016
with shortened month: Tuesday 21 Jun, 2016
short form: 2016/06/21 11:49 AM

Thanks for building this project!

Issue with installed app from Play Store

Salam guys,
Im getting this error when I install my app from the Play Store

Caused by java.util.MissingResourceException: Can't find bundle for base name com.github.msarhan.ummalqura.calendar.text.UmmalquraFormatData, locale en at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1558) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1381) at java.util.ResourceBundle.getBundle(ResourceBundle.java:847) at com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols.getMonths(Unknown Source:38) at com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols.(Unknown Source:10) at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.getDisplayName(Unknown Source:5)

Can someone help me with this issue?

JDK 8 Support

Tests fail if use JDK 8 to build the library. The long month names coming as short.

com.github.msarhan.ummalqura.calendar.DateTimeException: Invalid Hijrah day of month: 30

     UmmalquraCalendar tempWorkingCalendar = new UmmalquraCalendar();
    tempWorkingCalendar.set(1442, 6, 30);
    String displayM = tempWorkingCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH)
            + " " + tempWorkingCalendar.get(Calendar.DAY_OF_MONTH) + ", " + tempWorkingCalendar.get(Calendar.MONTH) + ", " + month.getYear();

com.github.msarhan.ummalqura.calendar.DateTimeException: Invalid Hijrah day of month: 30
at com.github.msarhan.ummalqura.calendar.HijrahChronology.getEpochDay(HijrahChronology.java:255)
at com.github.msarhan.ummalqura.calendar.HijrahChronology.toGregorian(HijrahChronology.java:697)
at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.set(UmmalquraCalendar.java:250)
at java.util.Calendar.set(Calendar.java:1227)

Formatting not work in samsung android devices.

i try it on other devices and it work perfect. But on Samsung devices it not working. below format i have checked on many devices:
dateFormat.applyPattern("d MMMM, y");
in Samsung device it give "05 0009, 1441", while on other it give "05 Ramadhan, 1441"

Using library in Android API 22 throws StackoverflowException

java.lang.StackOverflowError
        at java.util.Arrays.binarySearch(Arrays.java:411)
        at java.util.Arrays.binarySearch(Arrays.java:391)
        at libcore.util.ZoneInfo.getOffset(ZoneInfo.java:207)
        at libcore.util.ZoneInfo.getOffset(ZoneInfo.java:201)
        at java.util.GregorianCalendar.fullFieldsCalc(GregorianCalendar.java:493)
        at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:573)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:311)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calendar.getTimeInMillis(Calendar.java:1034)
        at java.util.Calendar.getTime(Calendar.java:1021)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.computeFields(UmmalquraCalendar.java:317)
        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:783)
        at java.util.Calen

Invalid Hijrah day of month: 30

This simple code throw DateTimeException exception:

val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.US)
dateFormat.calendar = UmmalquraCalendar()

val calendar = UmmalquraCalendar()
calendar.time = dateFormat.parse("30/02/1442")!!

It says Invalid Hijrah day of month: 30 but month 4 does have 30 days!

Any help?

Adding an offset

Hi,
Thanks for the wonderful work.
I wanted to check if there is any mechanism to (+) or (-) offset days to this calendar? As the calculation of this algorithm may differ by a day or two depending on moon sighting. Please let me know. Thank you.

regards,
Mohammed

"1440, 8, 1" and "1440, 9, 1" has same result

  UmmalquraCalendar cal = new UmmalquraCalendar(1440, 8, 1);
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(cal.getTime());
    int y,m,d;
    y = calendar.get(Calendar.YEAR);
    m = calendar.get(Calendar.MONTH);
    d = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(y + "/" + m + "/" + d );

    cal = new UmmalquraCalendar(1440, 9, 1);
    calendar = new GregorianCalendar();
    calendar.setTime(cal.getTime());
    y = calendar.get(Calendar.YEAR);
    m = calendar.get(Calendar.MONTH);
    d = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(y + "/" + m + "/" + d );

"1440, 8, 1" and "1440, 9, 1" has same result !

2019/5/4
2019/5/4

another test result:
1440, 6, 27------>2019/4/2
1440, 7, 15------>2019/3/20

GregorianCalendar to UmmalquraCalendar is correct,UmmalquraCalendar to GregorianCalendar sometimes is wrong!

Date Format issue with Orio 8.0

This issue with Date Format issue with Orio 8.0 And on above version working fine.

           UmmalquraCalendar calendar = new UmmalquraCalendar();
           calendar.set(Calendar.YEAR, 1442);
           calendar.set(Calendar.DAY_OF_MONTH, 16);
           calendar.set(Calendar.MONTH, UmmalquraCalendar.THUL_HIJJAH);

        SimpleDateFormat dateFormat = new SimpleDateFormat("", Locale.ENGLISH);
        dateFormat.setCalendar(calendar);
        dateFormat.applyPattern("E, MMMM dd");
        String date = dateFormat.format(calendar.getTime());
        
        Result showing format like :   16 0012 1442

An issue with Proguard

I get this warning while generating signed Apk:
and i did add the following in the rules:

-keep class  com.github.msarhan.ummalqura.calendar.**{ *; }
-keep interface com.github.msarhan.ummalqura.calendar.**{ *; }
Warning:com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols: can't find referenced class java.util.Locale$Category
Warning:com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols: can't find referenced method 'java.util.Locale getDefault(java.util.Locale$Category)' in library class java.util.Locale
Warning:com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols: can't find referenced class java.util.Locale$Category
Note: android.support.v4.media.IMediaBrowserServiceCallbacksAdapterApi21: can't find dynamically referenced class android.service.media.IMediaBrowserServiceCallbacks
Note: android.support.v4.media.IMediaBrowserServiceCallbacksAdapterApi21: can't find dynamically referenced class android.content.pm.ParceledListSlice
Note: android.support.v4.media.IMediaBrowserServiceCallbacksAdapterApi21$Stub: can't find dynamically referenced class android.service.media.IMediaBrowserServiceCallbacks$Stub
Note: android.support.v4.media.ParceledListSliceAdapterApi21: can't find dynamically referenced class android.content.pm.ParceledListSlice
Note: android.support.v4.text.ICUCompatApi23: can't find dynamically referenced class libcore.icu.ICU
Note: android.support.v4.text.ICUCompatIcs: can't find dynamically referenced class libcore.icu.ICU
Note: android.support.v7.widget.DrawableUtils: can't find dynamically referenced class android.graphics.Insets
Note: android.support.v4.app.NotificationCompatJellybean accesses a declared field 'icon' dynamicallyk

Crashes on any locale other than English and Arabic

This line:

ResourceBundle resource = ResourceBundle.getBundle("com.github.msarhan.ummalqura.calendar.text.UmmalquraFormatData", locale);

crashes the app if run on French / German / Russian etc as the bundle only includes _ar and _en. This should be done in a try / catch and if a locale isn't found, English should be used.

DateTimeException when using set method

Simply trying to add/set a month or a year to the calender object when DAY_OF_MONTH is 30. It'll throw DateTimeException: Invalid Hijrah day of month: 30 because it has 29 days in the new month.
Fore ex:

calendar.add(UmmalquraCalendar.MONTH, 1)
// Or using set
calendar[UmmalquraCalendar.YEAR] = 1446

This doesn't happen with Calender, it'll pick the last day of month of the new month instead.

Thanks in advance!

DateTimeException Invalid Hijrah day of month: 30

Caused by com.github.msarhan.ummalqura.calendar.DateTimeException
Invalid Hijrah day of month: 30
com.github.msarhan.ummalqura.calendar.HijrahChronology.getEpochDay (HijrahChronology.java:255)
com.github.msarhan.ummalqura.calendar.HijrahChronology.toGregorian (HijrahChronology.java:697)
com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.set (UmmalquraCalendar.java:250)
com.github.msarhan.ummalqura.calendar.UmmalquraCalendar. (UmmalquraCalendar.java:193)
com.github.msarhan.ummalqura.calendar.UmmalquraCalendar. (UmmalquraCalendar.java:155)

this happened at (30/11/1442)

java.lang.IllegalArgumentException:

Caused by: java.lang.IllegalArgumentException:
at com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols.initializeData (UmmalquraDateFormatSymbols.java)
at com.github.msarhan.ummalqura.calendar.UmmalquraDateFormatSymbols. (UmmalquraDateFormatSymbols.java)
at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.getDisplayName (UmmalquraCalendar.java)
at com.custom.hijricalendar.format.DateFormatTitleFormatter.a (DateFormatTitleFormatter.java)
at com.custom.hijricalendar.TitleChanger.doChange (TitleChanger.java)
at com.custom.hijricalendar.TitleChanger.change (TitleChanger.java:1)
at com.custom.hijricalendar.MaterialHijriCalendarView.updateUi (MaterialHijriCalendarView.java:1)
at com.custom.hijricalendar.MaterialHijriCalendarView.access$600 (MaterialHijriCalendarView.java:8)
at com.custom.hijricalendar.MaterialHijriCalendarView$2.onPageSelected (MaterialHijriCalendarView.java:8)

Issues Date Conversion

I have same problem today
Example :
` Calendar uCal = new UmmalquraCalendar(1439, UmmalquraCalendar.RAJAB, 15);
GregorianCalendar gCal = new GregorianCalendar();
gCal.setTime(uCal.getTime());

gCal.get(Calendar.YEAR);
gCal.get(Calendar.MONTH);
gCal.get(Calendar.DAY_OF_MONTH);

System.out.println(gCal.getTime());`
Same result if i choose JUMADA_THANI
Calendar uCal = new UmmalquraCalendar(1439, UmmalquraCalendar.JUMADA_THANI, 15);

Please Fix it ASAP.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.