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 two 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, however, is 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 astronical
calculations. At present, the approximations used in this class are fairly
simplistic; they will be improved in later versions of the code.
The
setCivil
method determines
which approach is used to determine the start of a month. By default, the
fixed-cycle civil calendar is used. However, if
setCivil(false)
is called, an approximation of the true lunar calendar will be used.
This class should not be subclassed.
IslamicCalendar usually should be instantiated using
Calendar.getInstance(ULocale)
passing in a
ULocale
with the tag
"@calendar=islamic"
or
"@calendar=islamic-civil"
.
DHU_AL_HIJJAH
public static final int DHU_AL_HIJJAH
Constant for Dhu al-Hijjah, the 12th month of the Islamic year.
DHU_AL_QIDAH
public static final int DHU_AL_QIDAH
Constant for Dhu al-Qi'dah, the 11th month of the Islamic year.
JUMADA_1
public static final int JUMADA_1
Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year.
JUMADA_2
public static final int JUMADA_2
Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year.
MUHARRAM
public static final int MUHARRAM
Constant for Muharram, the 1st month of the Islamic year.
RABI_1
public static final int RABI_1
Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year.
RABI_2
public static final int RABI_2
Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year.
RAJAB
public static final int RAJAB
Constant for Rajab, the 7th month of the Islamic year.
RAMADAN
public static final int RAMADAN
Constant for Ramadan, the 9th month of the Islamic year.
SAFAR
public static final int SAFAR
Constant for Safar, the 2nd month of the Islamic year.
SHABAN
public static final int SHABAN
Constant for Sha'ban, the 8th month of the Islamic year.
SHAWWAL
public static final int SHAWWAL
Constant for Shawwal, the 10th month of the Islamic year.
IslamicCalendar
public IslamicCalendar()
Constructs a default IslamicCalendar
using the current time
in the default time zone with the default locale.
IslamicCalendar
public IslamicCalendar(Date date)
Constructs an IslamicCalendar
with the given date set
in the default time zone with the default locale.
date
- The date to which the new calendar is set.
IslamicCalendar
public IslamicCalendar(Locale aLocale)
Constructs an IslamicCalendar
based on the current time
in the default time zone with the given locale.
aLocale
- the given locale.
IslamicCalendar
public IslamicCalendar(TimeZone zone)
Constructs an IslamicCalendar
based on the current time
in the given time zone with the default locale.
zone
- the given time zone.
IslamicCalendar
public IslamicCalendar(TimeZone zone,
Locale aLocale)
Constructs an IslamicCalendar
based on the current time
in the given time zone with the given locale.
zone
- the given time zone.aLocale
- the given locale.
IslamicCalendar
public IslamicCalendar(TimeZone zone,
ULocale locale)
Constructs an IslamicCalendar
based on the current time
in the given time zone with the given locale.
zone
- the given time zone.locale
- the given ulocale.
IslamicCalendar
public IslamicCalendar(ULocale locale)
Constructs an IslamicCalendar
based on the current time
in the default time zone with the given locale.
locale
- the given ulocale.
IslamicCalendar
public IslamicCalendar(int year,
int month,
int date)
Constructs an IslamicCalendar
with the given date set
in the default time zone with the default locale.
year
- the value used to set the YEAR
time field in the calendar.month
- the value used to set the MONTH
time field in the calendar.
Note that the month value is 0-based. e.g., 0 for Muharram.date
- the value used to set the DATE
time field in the calendar.
IslamicCalendar
public IslamicCalendar(int year,
int month,
int date,
int hour,
int minute,
int second)
Constructs an IslamicCalendar
with the given date
and time set for the default time zone with the default locale.
year
- the value used to set the YEAR
time field in the calendar.month
- the value used to set the MONTH
time field in the calendar.
Note that the month value is 0-based. e.g., 0 for Muharram.date
- the value used to set the DATE
time field in the calendar.hour
- the value used to set the HOUR_OF_DAY
time field
in the calendar.minute
- the value used to set the MINUTE
time field
in the calendar.second
- the value used to set the SECOND
time field
in the calendar.