// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2003-2008, International Business Machines Corporation * and others. All Rights Reserved. ***************************************************************************** * * File INDIANCAL.H ***************************************************************************** */ #ifndef INDIANCAL_H #define INDIANCAL_H #include "unicode/utypes.h" #if !UCONFIG_NO_FORMATTING #include "unicode/calendar.h" U_NAMESPACE_BEGIN /** * Concrete class which provides the Indian calendar. *
* IndianCalendar
is a subclass of Calendar
* that numbers years since the beginning of SAKA ERA. This is the civil calendar
* which is accepted by government of India as Indian National Calendar.
* The two calendars most widely used in India today are the Vikrama calendar
* followed in North India and the Shalivahana or Saka calendar which is followed
* in South India and Maharashtra.
* A variant of the Shalivahana Calendar was reformed and standardized as the
* Indian National calendar in 1957.
*
* Some details of Indian National Calendar (to be implemented) : * The Months * Month Length Start date (Gregorian) * ================================================= * 1 Chaitra 30/31 March 22* * 2 Vaisakha 31 April 21 * 3 Jyaistha 31 May 22 * 4 Asadha 31 June 22 * 5 Sravana 31 July 23 * 6 Bhadra 31 August 23 * 7 Asvina 30 September 23 * 8 Kartika 30 October 23 * 9 Agrahayana 30 November 22 * 10 Pausa 30 December 22 * 11 Magha 30 January 21 * 12 Phalguna 30 February 20 * In leap years, Chaitra has 31 days and starts on March 21 instead. * The leap years of Gregorian calendar and Indian National Calendar are in synchornization. * So When its a leap year in Gregorian calendar then Chaitra has 31 days. * * The Years * Years are counted in the Saka Era, which starts its year 0 in 78AD (by gregorian calendar). * So for eg. 9th June 2006 by Gregorian Calendar, is same as 19th of Jyaistha in 1928 of Saka * era by Indian National Calendar. *
* The Indian Calendar has only one allowable era: Saka Era
. If the
* calendar is not in lenient mode (see setLenient
), dates before
* 1/1/1 Saka Era are rejected with an IllegalArgumentException
.
*
* @internal
*/
class U_I18N_API IndianCalendar : public Calendar {
public:
/**
* Useful constants for IndianCalendar.
* @internal
*/
enum EEras {
/**
* Constant for Chaitra, the 1st month of the Indian year.
*/
CHAITRA,
/**
* Constant for Vaisakha, the 2nd month of the Indian year.
*/
VAISAKHA,
/**
* Constant for Jyaistha, the 3rd month of the Indian year.
*/
JYAISTHA,
/**
* Constant for Asadha, the 4th month of the Indian year.
*/
ASADHA,
/**
* Constant for Sravana, the 5th month of the Indian year.
*/
SRAVANA,
/**
* Constant for Bhadra the 6th month of the Indian year
*/
BHADRA,
/**
* Constant for the Asvina, the 7th month of the Indian year.
*/
ASVINA,
/**
* Constant for Kartika, the 8th month of the Indian year.
*/
KARTIKA,
/**
* Constant for Agrahayana, the 9th month of the Indian year.
*/
AGRAHAYANA,
/**
* Constant for Pausa, the 10th month of the Indian year.
*/
PAUSA,
/**
* Constant for Magha, the 11th month of the Indian year.
*/
MAGHA,
/**
* Constant for Phalguna, the 12th month of the Indian year.
*/
PHALGUNA
};
//-------------------------------------------------------------------------
// Constructors...
//-------------------------------------------------------------------------
/**
* Constructs an IndianCalendar based on the current time in the default time zone
* with the given locale.
*
* @param aLocale The given locale.
* @param success Indicates the status of IndianCalendar object construction.
* Returns U_ZERO_ERROR if constructed successfully.
* @param beCivil Whether the calendar should be civil (default-true) or religious (false)
* @internal
*/
IndianCalendar(const Locale& aLocale, UErrorCode &success);
/**
* Copy Constructor
* @internal
*/
IndianCalendar(const IndianCalendar& other);
/**
* Destructor.
* @internal
*/
virtual ~IndianCalendar();
/**
* Determines whether this object uses the fixed-cycle Indian civil calendar
* or an approximation of the religious, astronomical calendar.
*
* @param beCivil CIVIL
to use the civil calendar,
* ASTRONOMICAL
to use the astronomical calendar.
* @internal
*/
//void setCivil(ECivil beCivil, UErrorCode &status);
/**
* Returns true
if this object is using the fixed-cycle civil
* calendar, or false
if using the religious, astronomical
* calendar.
* @internal
*/
//UBool isCivil();
// TODO: copy c'tor, etc
// clone
virtual IndianCalendar* clone() const override;
private:
/**
* Determine whether a year is the gregorian year a leap year
*/
//static UBool isGregorianLeap(int32_t year);
//----------------------------------------------------------------------
// Calendar framework
//----------------------------------------------------------------------
protected:
/**
* @internal
*/
virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the length (in days) of the given month.
*
* @param year The year in Saka era
* @param year The month(0-based) in Indian year
* @internal
*/
virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
/**
* Return the number of days in the given Indian year
* @internal
*/
virtual int32_t handleGetYearLength(int32_t extendedYear) const override;
//-------------------------------------------------------------------------
// Functions for converting from field values to milliseconds....
//-------------------------------------------------------------------------
// Return JD of start of given month/year
/**
* @internal
*/
virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const override;
//-------------------------------------------------------------------------
// Functions for converting from milliseconds to field values
//-------------------------------------------------------------------------
/**
* @internal
*/
virtual int32_t handleGetExtendedYear() override;
/**
* Override Calendar to compute several fields specific to the Indian
* calendar system. These are:
*
*