IslamicCalendar is a subclass of Calendar
that that implements the Islamic civil and religious calendars. It
is used as the civil calendar in most of the Arab world and the
liturgical calendar of the Islamic faith worldwide. This calendar
is also known as the "Hijri" calendar, since it starts at the time
of Mohammed's emigration (or "hijra") to Medinah on Thursday,
July 15, 622 AD (Julian).
The Islamic calendar is strictly lunar, and thus an Islamic year of twelve lunar months does not correspond to the solar year used by most other calendar systems, including the Gregorian. An Islamic year is, on average, about 354 days long, so each successive Islamic year starts about 11 days earlier in the corresponding Gregorian year.
Each month of the calendar starts when the new moon's crescent is visible at sunset. However, in order to keep the time fields in this class synchronized with those of the other calendars and with local clock time, we treat days and months as beginning at midnight, roughly 6 hours after the corresponding sunset.
There are three main variants of the Islamic calendar in existence. The first
is the civil calendar, which uses a fixed cycle of alternating 29-
and 30-day months, with a leap day added to the last month of 11 out of
every 30 years. This calendar is easily calculated and thus predictable in
advance, so it is used as the civil calendar in a number of Arab countries.
This is the default behavior of a newly-created IslamicCalendar
object.
The Islamic religious calendar and Saudi Arabia's Umm al-Qura calendar, however, are based on the observation of the crescent moon. It is thus affected by the position at which the observations are made, seasonal variations in the time of sunset, the eccentricities of the moon's orbit, and even the weather at the observation site. This makes it impossible to calculate in advance, and it causes the start of a month in the religious calendar to differ from the civil calendar by up to three days.
Using astronomical calculations for the position of the sun and moon, the moon's illumination, and other factors, it is possible to determine the start of a lunar month with a fairly high degree of certainty. However, these calculations are extremely complicated and thus slow, so most algorithms, including the one used here, are only approximations of the true astronomical calculations. At present, the approximations used in this class are fairly simplistic; they will be improved in later versions of the code.
Like the Islamic religious calendar, Umm al-Qura is also based on the sighting method of the crescent moon but is standardized by Saudi Arabia.
The setCalculationType method determines
which approach is used to determine the start of a month. By default, the
fixed-cycle civil calendar is used. However, if setCalculationType(ISLAMIC)
is called, an approximation of the true lunar calendar will be used.
Similarly, if setCalculationType(ISLAMIC_UMALQURA) is called, an approximation
of the Umm al-Qura lunar calendar will be used.
This class should not be subclassed.
IslamicCalendar usually should be instantiated using
com. passing in a ULocale
with the tag "@calendar=islamic" or "@calendar=islamic-civil"
or "@calendar=islamic-umalqura".
com.ibm.icu.util.GregorianCalendar , com.ibm.icu.util.Calendar
| Modifier and Type | Class and Description |
|---|---|
| public static enum | IslamicCalendar.CalculationType
enumeration of available calendar calculation types |
| Modifier and Type | Field and Description |
|---|---|
| private static CalendarAstronomer | |
| private static final long | ASTRONOMICAL_EPOC
Thursday EPOC |
| private static CalendarCache | |
| private boolean | civil
|
| private static final long | CIVIL_EPOC
Friday EPOC |
| private IslamicCalendar. | cType
determines the type of calculation to use for this instance |
| public static final int | DHU_AL_HIJJAH
Constant for Dhu al-Hijjah, the 12th month of the Islamic year. |
| public static final int | DHU_AL_QIDAH
Constant for Dhu al-Qi'dah, the 11th month of the Islamic year. |
| private static final long | |
| public static final int | JUMADA_1
Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year. |
| public static final int | JUMADA_2
Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year. |
| private static final int[][] | |
| public static final int | MUHARRAM
Constant for Muharram, the 1st month of the Islamic year. |
| public static final int | RABI_1
Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year. |
| public static final int | RABI_2
Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year. |
| public static final int | RAJAB
Constant for Rajab, the 7th month of the Islamic year. |
| public static final int | RAMADAN
Constant for Ramadan, the 9th month of the Islamic year. |
| public static final int | SAFAR
Constant for Safar, the 2nd month of the Islamic year. |
| private static final long | |
| public static final int | SHABAN
Constant for Sha'ban, the 8th month of the Islamic year. |
| public static final int | SHAWWAL
Constant for Shawwal, the 10th month of the Islamic year. |
| private static final int[] | |
| private static final int | |
| private static final int | |
| private static final byte[] |
| Access | Constructor and Description |
|---|---|
| public | IslamicCalendar()
Constructs a default |
| public | IslamicCalendar(TimeZone
the given time zone. zone)Constructs an |
| public | IslamicCalendar(Locale
the given locale. aLocale)Constructs an |
| public | IslamicCalendar(ULocale
the given ulocale. locale)Constructs an |
| public | IslamicCalendar(TimeZone
the given time zone. zone, Locale the given locale. aLocale)Constructs an |
| public | IslamicCalendar(TimeZone
the given time zone. zone, ULocale the given ulocale. locale)Constructs an |
| public | IslamicCalendar(Date
The date to which the new calendar is set. date)Constructs an |
| public | IslamicCalendar(int
the value used to set the year, int YEAR time field in the calendar.the value used to set the month, int MONTH time field in the calendar.
Note that the month value is 0-based. e.g., 0 for Muharram.the value used to set the date)DATE time field in the calendar.Constructs an |
| public | IslamicCalendar(int
the value used to set the year, int YEAR time field in the calendar.the value used to set the month, int MONTH time field in the calendar.
Note that the month value is 0-based. e.g., 0 for Muharram.the value used to set the date, int DATE time field in the calendar.the value used to set the hour, int HOUR_OF_DAY time field
in the calendar.the value used to set the minute, int MINUTE time field
in the calendar.the value used to set the second)SECOND time field
in the calendar.Constructs an |
| Modifier and Type | Method and Description |
|---|---|
| private static final boolean | |
| public IslamicCalendar. | |
| public String | |
| protected void | handleComputeFields(int julianDay)
Override Calendar to compute several fields specific to the Islamic
calendar system.
|
| protected int | handleComputeMonthStart(int
the extended year eyear, int the zero-based month, or 0 if useMonth is false month, boolean if false, compute the day before the first day of
the given year, otherwise, compute the day before the first day of
the given month useMonth)Implements abstract com. |
| protected int | handleGetExtendedYear()
Implements abstract com. |
| protected int | handleGetLimit(int
one of the above field numbers field, int one of limitType)MINIMUM, GREATEST_MINIMUM,
LEAST_MAXIMUM, or MAXIMUMImplements abstract com. |
| protected int | handleGetMonthLength(int
The hijri year extendedYear, int The hijri month, 0-based month)
Return the length (in days) of the given month.
|
| protected int | handleGetYearLength(int extendedYear)
Return the number of days in the given Islamic year
|
| public boolean | Returns: true if the date in the fields is in a Temporal proposal defined leap year. False otherwise.Overrides com. ICU |
| public boolean | isCivil()
Returns |
| private long | monthStart(int
The hijri year year, int The hijri month, 0-based month)Return the day # on which the given month starts. |
| pack-priv static final double | moonAge(long
The time at which the moon's age is desired,
in millis since 1/1/1970. time)Return the "age" of the moon at the given time; this is the difference in ecliptic latitude between the moon and the sun. |
| private void | readObject(ObjectInputStream in)
Reconstitute this object from a stream (i.e., deserialize it).
|
| private void | |
| public void | setCalculationType(IslamicCalendar.
sets the calculation type for this calendar. |
| public void | setCivil(boolean
true to use the civil calendar,
false to use the astronomical calendar.Determines whether this object uses the fixed-cycle Islamic civil calendar or an approximation of the religious, astronomical calendar. |
| private static final long | Returns: The day number on which the given month starts.The month in question, origin 0 from the Hijri epoch month)Find the day number on which a particular month of the true/lunar Islamic calendar starts. |
| private long |
| astro | back to summary |
|---|---|
| private static CalendarAstronomer astro | |
| ASTRONOMICAL_EPOC | back to summary |
|---|---|
| private static final long ASTRONOMICAL_EPOC Thursday EPOC | |
| cache | back to summary |
|---|---|
| private static CalendarCache cache | |
| civil | back to summary |
|---|---|
| private boolean civil
| |
| CIVIL_EPOC | back to summary |
|---|---|
| private static final long CIVIL_EPOC Friday EPOC | |
| cType | back to summary |
|---|---|
| private IslamicCalendar. determines the type of calculation to use for this instance
| |
| DHU_AL_HIJJAH | back to summary |
|---|---|
| public static final int DHU_AL_HIJJAH Constant for Dhu al-Hijjah, the 12th month of the Islamic year.
| |
| DHU_AL_QIDAH | back to summary |
|---|---|
| public static final int DHU_AL_QIDAH Constant for Dhu al-Qi'dah, the 11th month of the Islamic year.
| |
| HIJRA_MILLIS | back to summary |
|---|---|
| private static final long HIJRA_MILLIS | |
| JUMADA_1 | back to summary |
|---|---|
| public static final int JUMADA_1 Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year.
| |
| JUMADA_2 | back to summary |
|---|---|
| public static final int JUMADA_2 Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year.
| |
| LIMITS | back to summary |
|---|---|
| private static final int[][] LIMITS | |
| MUHARRAM | back to summary |
|---|---|
| public static final int MUHARRAM Constant for Muharram, the 1st month of the Islamic year.
| |
| RABI_1 | back to summary |
|---|---|
| public static final int RABI_1 Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year.
| |
| RABI_2 | back to summary |
|---|---|
| public static final int RABI_2 Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year.
| |
| RAJAB | back to summary |
|---|---|
| public static final int RAJAB Constant for Rajab, the 7th month of the Islamic year.
| |
| RAMADAN | back to summary |
|---|---|
| public static final int RAMADAN Constant for Ramadan, the 9th month of the Islamic year.
| |
| SAFAR | back to summary |
|---|---|
| public static final int SAFAR Constant for Safar, the 2nd month of the Islamic year.
| |
| serialVersionUID | back to summary |
|---|---|
| private static final long serialVersionUID | |
| SHABAN | back to summary |
|---|---|
| public static final int SHABAN Constant for Sha'ban, the 8th month of the Islamic year.
| |
| SHAWWAL | back to summary |
|---|---|
| public static final int SHAWWAL Constant for Shawwal, the 10th month of the Islamic year.
| |
| UMALQURA_MONTHLENGTH | back to summary |
|---|---|
| private static final int[] UMALQURA_MONTHLENGTH | |
| UMALQURA_YEAR_END | back to summary |
|---|---|
| private static final int UMALQURA_YEAR_END | |
| UMALQURA_YEAR_START | back to summary |
|---|---|
| private static final int UMALQURA_YEAR_START | |
| UMALQURA_YEAR_START_ESTIMATE_FIX | back to summary |
|---|---|
| private static final byte[] UMALQURA_YEAR_START_ESTIMATE_FIX | |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar() Constructs a default
| |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(TimeZone zone) Constructs an
| |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(Locale aLocale) Constructs an | |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(ULocale locale) Constructs an | |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(TimeZone zone, Locale aLocale) Constructs an | |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(TimeZone zone, ULocale locale) Constructs an | |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(Date date) Constructs an
| |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(int year, int month, int date) Constructs an
| |
| IslamicCalendar | back to summary |
|---|---|
| public IslamicCalendar(int year, int month, int date, int hour, int minute, int second) Constructs an
| |
| civilLeapYear | back to summary |
|---|---|
| private static final boolean civilLeapYear(int year) Determine whether a year is a leap year in the Islamic civil calendar | |
| getCalculationType | back to summary |
|---|---|
| public IslamicCalendar. gets the calculation type for this calendar.
| |
| getType | back to summary |
|---|---|
| public String getType() Overrides com. Doc from com. ICU See type="old type name" for the calendar attribute of locale IDs at http://www.unicode.org/reports/tr35/#Key_Type_Definitions | |
| handleComputeFields | back to summary |
|---|---|
| protected void handleComputeFields(int julianDay) Overrides com. Override Calendar to compute several fields specific to the Islamic calendar system. These are:
| |
| handleComputeMonthStart | back to summary |
|---|---|
| protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) Implements abstract com. Doc from com. Returns the Julian day number of day before the first day of the given month in the given extended year. Subclasses should override this method to implement their calendar system.
| |
| handleGetExtendedYear | back to summary |
|---|---|
| protected int handleGetExtendedYear() Implements abstract com. Doc from com. Returns the extended year defined by the current fields. This will use the EXTENDED_YEAR field or the YEAR and supra-year fields (such as ERA) specific to the calendar system, depending on which set of fields is newer. | |
| handleGetLimit | back to summary |
|---|---|
| protected int handleGetLimit(int field, int limitType) Implements abstract com. Doc from com. Subclass API for defining limits of different types. Subclasses must implement this method to return limits for the following fields: ERA YEAR MONTH WEEK_OF_YEAR WEEK_OF_MONTH DAY_OF_MONTH DAY_OF_YEAR DAY_OF_WEEK_IN_MONTH YEAR_WOY EXTENDED_YEAR | |
| handleGetMonthLength | back to summary |
|---|---|
| protected int handleGetMonthLength(int extendedYear, int month) Overrides com. Return the length (in days) of the given month. | |
| handleGetYearLength | back to summary |
|---|---|
| protected int handleGetYearLength(int extendedYear) Overrides com. Return the number of days in the given Islamic year | |
| inTemporalLeapYear | back to summary |
|---|---|
| public boolean inTemporalLeapYear() Overrides com. ICU
| |
| isCivil | back to summary |
|---|---|
| public boolean isCivil() Returns
| |
| monthStart | back to summary |
|---|---|
| private long monthStart(int year, int month) Return the day # on which the given month starts. Days are counted from the Hijri epoch, origin 0.
| |
| moonAge | back to summary |
|---|---|
| pack-priv static final double moonAge(long time) Return the "age" of the moon at the given time; this is the difference in ecliptic latitude between the moon and the sun. This method simply calls CalendarAstronomer.moonAge, converts to degrees, and adjusts the resultto be in the range [-180, 180].
| |
| readObject | back to summary |
|---|---|
| private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException Hides com. Doc from com. Reconstitute this object from a stream (i.e., deserialize it). | |
| setCalcTypeForLocale | back to summary |
|---|---|
| private void setCalcTypeForLocale(ULocale locale) set type based on locale | |
| setCalculationType | back to summary |
|---|---|
| public void setCalculationType(IslamicCalendar. sets the calculation type for this calendar.
| |
| setCivil | back to summary |
|---|---|
| public void setCivil(boolean beCivil) Determines whether this object uses the fixed-cycle Islamic civil calendar or an approximation of the religious, astronomical calendar.
| |
| trueMonthStart | back to summary |
|---|---|
| private static final long trueMonthStart(long month) Find the day number on which a particular month of the true/lunar Islamic calendar starts.
| |
| yearStart | back to summary |
|---|---|
| private long yearStart(int year) Return the day # on which the given year starts. Days are counted from the Hijri epoch, origin 0. | |
| Modifier and Type | Field and Description |
|---|---|
| private String | |
| public static final IslamicCalendar. | ISLAMIC
Religious calendar (astronomical simulation) |
| public static final IslamicCalendar. | ISLAMIC_CIVIL
Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm with civil (Friday) epoch. |
| public static final IslamicCalendar. | ISLAMIC_TBLA
Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm with astronomical (Thursday) epoch. |
| public static final IslamicCalendar. | ISLAMIC_UMALQURA
Umm al-Qura calendar |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv String | |
| public static IslamicCalendar. | |
| public static IslamicCalendar. |
| bcpType | back to summary |
|---|---|
| private String bcpType | |
| ISLAMIC | back to summary |
|---|---|
| public static final IslamicCalendar. Religious calendar (astronomical simulation)
| |
| ISLAMIC_CIVIL | back to summary |
|---|---|
| public static final IslamicCalendar. Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm with civil (Friday) epoch.
| |
| ISLAMIC_TBLA | back to summary |
|---|---|
| public static final IslamicCalendar. Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm with astronomical (Thursday) epoch.
| |
| ISLAMIC_UMALQURA | back to summary |
|---|---|
| public static final IslamicCalendar. Umm al-Qura calendar
| |
| CalculationType | back to summary |
|---|---|
| private CalculationType(String bcpType) | |
| bcpType | back to summary |
|---|---|
| pack-priv String bcpType() | |
| valueOf | back to summary |
|---|---|
| public static IslamicCalendar. | |
| values | back to summary |
|---|---|
| public static IslamicCalendar. | |