// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation * and others. All Rights Reserved. ****************************************************************************** * * File ISLAMCAL.H * * Modification History: * * Date Name Description * 10/14/2003 srl ported from java IslamicCalendar ***************************************************************************** */ #ifndef ISLAMCAL_H #define ISLAMCAL_H #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING #include "unicode/calendar.h" U_NAMESPACE_BEGIN /** * <code>IslamicCalendar</code> is a subclass of <code>Calendar</code> * 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). * <p> * 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. * <p> * 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. * <p> * There are two main variants of the Islamic calendar in existence. The first * is the <em>civil</em> 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 <code>IslamicCalendar</code> * object. This calendar variant is implemented in the IslamicCivilCalendar * class. * <p> * The Islamic <em>religious</em> calendar, however, is based on the <em>observation</em> * 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. * <p> * 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. * <p> * * @see GregorianCalendar * * @author Laura Werner * @author Alan Liu * @author Steven R. Loomis * @internal */ class U_I18N_API IslamicCalendar : public Calendar { … }; /* * IslamicCivilCalendar is one of the two main variants of the Islamic calendar. * The <em>civil</em> 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 calendar is referring as "Islamic calendar, tabular (intercalary years * [2,5,7,10,13,16,18,21,24,26,29]- civil epoch" in CLDR. */ class U_I18N_API IslamicCivilCalendar : public IslamicCalendar { … }; /* * IslamicTBLACalendar calendar. * This is a subclass of IslamicCivilCalendar. The only differences in the * calendar math is it uses different epoch. * This calendar is referring as "Islamic calendar, tabular (intercalary years * [2,5,7,10,13,16,18,21,24,26,29] - astronomical epoch" in CLDR. */ class U_I18N_API IslamicTBLACalendar : public IslamicCivilCalendar { … }; /* * IslamicUmalquraCalendar * This calendar is referred as "Islamic calendar, Umm al-Qura" in CLDR. */ class U_I18N_API IslamicUmalquraCalendar : public IslamicCalendar { … }; /* * IslamicRGSACalendar * Islamic calendar, Saudi Arabia sighting. Since the calendar depends on the * sighting, it is impossible to implement by algorithm ahead of time. It is * currently identical to IslamicCalendar except the getType will return * "islamic-rgsa". */ class U_I18N_API IslamicRGSACalendar : public IslamicCalendar { … }; U_NAMESPACE_END #endif #endif