1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ***************************************************************************** 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (C) 2007-2008, International Business Machines Corporation 485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * and others. All Rights Reserved. 585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ***************************************************************************** 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * File CHNSECAL.H 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Modification History: 1085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 1185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Date Name Description 1285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 9/18/2007 ajmacher ported from java ChineseCalendar 1385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ***************************************************************************** 1485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 1585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#ifndef CHNSECAL_H 1785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define CHNSECAL_H 1885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/utypes.h" 2085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if !UCONFIG_NO_FORMATTING 2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/calendar.h" 2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2585bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_NAMESPACE_BEGIN 2685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/** 2885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <code>ChineseCalendar</code> is a concrete subclass of {@link Calendar} 2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * that implements a traditional Chinese calendar. The traditional Chinese 3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * calendar is a lunisolar calendar: Each month starts on a new moon, and 3185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * the months are numbered according to solar events, specifically, to 3285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * guarantee that month 11 always contains the winter solstice. In order 3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * to accomplish this, leap months are inserted in certain years. Leap 3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * months are numbered the same as the month they follow. The decision of 3585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * which month is a leap month depends on the relative movements of the sun 3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * and moon. 3785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 3885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p>This class defines one addition field beyond those defined by 3985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <code>Calendar</code>: The <code>IS_LEAP_MONTH</code> field takes the 4085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * value of 0 for normal months, or 1 for leap months. 4185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 4285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p>All astronomical computations are performed with respect to a time 4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * zone of GMT+8:00 and a longitude of 120 degrees east. Although some 4485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * calendars implement a historically more accurate convention of using 4585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Beijing's local longitude (116 degrees 25 minutes east) and time zone 4685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * (GMT+7:45:40) for dates before 1929, we do not implement this here. 4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p>Years are counted in two different ways in the Chinese calendar. The 4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * first method is by sequential numbering from the 61st year of the reign 5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * of Huang Di, 2637 BCE, which is designated year 1 on the Chinese 5185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * calendar. The second method uses 60-year cycles from the same starting 5285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * point, which is designated year 1 of cycle 1. In this class, the 5385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <code>EXTENDED_YEAR</code> field contains the sequential year count. 5485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * The <code>ERA</code> field contains the cycle number, and the 5585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <code>YEAR</code> field contains the year of the cycle, a value between 5685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 1 and 60. 5785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 5885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p>There is some variation in what is considered the starting point of 5985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * the calendar, with some sources starting in the first year of the reign 6085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * of Huang Di, rather than the 61st. This gives continuous year numbers 6185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 60 years greater and cycle numbers one greater than what this class 6285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * implements. 6385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 6485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p>Because <code>ChineseCalendar</code> defines an additional field and 6585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * redefines the way the <code>ERA</code> field is used, it requires a new 6685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * format class, <code>ChineseDateFormat</code>. As always, use the 6785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * methods <code>DateFormat.getXxxInstance(Calendar cal,...)</code> to 6885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * obtain a formatter for this calendar. 6985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p>References:<ul> 7185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 7285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <li>Dershowitz and Reingold, <i>Calendrical Calculations</i>, 7385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Cambridge University Press, 1997</li> 7485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 7585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <li>Helmer Aslaksen's 7685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <a href="http://www.math.nus.edu.sg/aslaksen/calendar/chinese.shtml"> 7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Chinese Calendar page</a></li> 7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <li>The <a href="http://www.tondering.dk/claus/calendar.html"> 8085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Calendar FAQ</a></li> 8185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 8285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * </ul> 8385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 8485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p> 8585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * This class should not be subclassed.</p> 8685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * <p> 8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * ChineseCalendar usually should be instantiated using 8885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * {@link com.ibm.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code> 8985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * with the tag <code>"@calendar=chinese"</code>.</p> 9085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 9185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @see com.ibm.icu.text.ChineseDateFormat 9285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @see com.ibm.icu.util.Calendar 9385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @author Alan Liu 9485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @stable ICU 2.8 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 9685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass ChineseCalendar : public Calendar { 9785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho public: 9885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //------------------------------------------------------------------------- 9985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Constructors... 10085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //------------------------------------------------------------------------- 10185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 10385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Constructs an ChineseCalendar based on the current time in the default time zone 10485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * with the given locale. 10585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 10685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @param aLocale The given locale. 10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @param success Indicates the status of ChineseCalendar object construction. 10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Returns U_ZERO_ERROR if constructed successfully. 10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 11085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 11185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ChineseCalendar(const Locale& aLocale, UErrorCode &success); 11285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 11385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 11485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copy Constructor 11585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 11685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 11785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ChineseCalendar(const ChineseCalendar& other); 11885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 11985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 12085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Destructor. 12185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 12285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 12385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual ~ChineseCalendar(); 12485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 12585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // clone 12685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual Calendar* clone() const; 12785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 12885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho private: 12985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //------------------------------------------------------------------------- 13185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Internal data.... 13285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //------------------------------------------------------------------------- 13385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UBool isLeapYear; 13585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //---------------------------------------------------------------------- 13785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Calendar framework 13885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //---------------------------------------------------------------------- 13985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 14085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho protected: 14185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 14285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; 14385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const; 14485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t handleGetExtendedYear(); 14585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 14685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual const UFieldResolutionTable* getFieldResolutionTable() const; 14785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 14885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 14985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 15085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 15185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode &status); 15285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void add(EDateFields field, int32_t amount, UErrorCode &status); 15385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode &status); 15485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void roll(EDateFields field, int32_t amount, UErrorCode &status); 15585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 15685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 15785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //---------------------------------------------------------------------- 15885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Internal methods & astronomical calculations 15985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho //---------------------------------------------------------------------- 16085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 16185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprivate: 16285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 16385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static const UFieldResolutionTable CHINESE_DATE_PRECEDENCE[]; 16485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 16585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static double daysToMillis(double days); 16685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static double millisToDays(double millis); 16785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t winterSolstice(int32_t gyear) const; 16885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t newMoonNear(double days, UBool after) const; 16985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t synodicMonthsBetween(int32_t day1, int32_t day2) const; 17085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t majorSolarTerm(int32_t days) const; 17185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UBool hasNoMajorSolarTerm(int32_t newMoon) const; 17285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UBool isLeapMonthBetween(int32_t newMoon1, int32_t newMoon2) const; 17385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void computeChineseFields(int32_t days, int32_t gyear, 17485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t gmonth, UBool setAllFields); 17585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t newYear(int32_t gyear) const; 17685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void offsetMonth(int32_t newMoon, int32_t dom, int32_t delta); 17785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // UObject stuff 18085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho public: 18185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 18285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @return The class ID for this object. All objects of a given class have the 18385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * same class ID. Objects of other classes have different class IDs. 18485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 18585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 18685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UClassID getDynamicClassID(void) const; 18785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 18885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 18985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Return the class ID for this class. This is useful only for comparing to a return 19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * value from getDynamicClassID(). For example: 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Base* polymorphic_pointer = createPolymorphicObject(); 19385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * if (polymorphic_pointer->getDynamicClassID() == 19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Derived::getStaticClassID()) ... 19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @return The class ID for all objects of this class. 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 19885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 20285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * return the calendar type, "chinese". 20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @return calendar type 20585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 20785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual const char * getType() const; 20885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 21085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho protected: 21185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 21285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * (Overrides Calendar) Return true if the current date for this Calendar is in 21385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Daylight Savings Time. Recognizes DST_OFFSET, if it is set. 21485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 21585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @param status Fill-in parameter which receives the status of this operation. 21685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @return True if the current date for this Calendar is in Daylight Savings Time, 21785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * false, otherwise. 21885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 21985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 22085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UBool inDaylightTime(UErrorCode& status) const; 22185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 22285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 22385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 22485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Returns TRUE because the Islamic Calendar does have a default century 22585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 22685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 22785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UBool haveDefaultCentury() const; 22885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 22985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 23085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Returns the date of the start of the default century 23185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @return start of century - in milliseconds since epoch, 1970 23285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 23385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 23485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UDate defaultCenturyStart() const; 23585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 23685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 23785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Returns the year in which the default century begins 23885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * @internal 23985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 24085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual int32_t defaultCenturyStartYear() const; 24185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 24285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho private: // default century stuff. 24385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 24485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * The system maintains a static default century start date. This is initialized 24585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * the first time it is used. Before then, it is set to SYSTEM_DEFAULT_CENTURY to 24685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * indicate an uninitialized state. Once the system default century date and year 24785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * are set, they do not change. 24885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 24985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static UDate fgSystemDefaultCenturyStart; 25085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 25185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 25285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * See documentation for systemDefaultCenturyStart. 25385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 25485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static int32_t fgSystemDefaultCenturyStartYear; 25585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 25685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 25785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Default value that indicates the defaultCenturyStartYear is unitialized 25885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 25985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static const int32_t fgSystemDefaultCenturyYear; 26085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 26185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 26285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * start of default century, as a date 26385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 26485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static const UDate fgSystemDefaultCentury; 26585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 26685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 26785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Returns the beginning date of the 100-year window that dates 26885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * with 2-digit years are considered to fall within. 26985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 27085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UDate internalGetDefaultCenturyStart(void) const; 27185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 27285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 27385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Returns the first year of the 100-year window that dates with 27485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 2-digit years are considered to fall within. 27585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 27685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t internalGetDefaultCenturyStartYear(void) const; 27785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 27885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho /** 27985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Initializes the 100-year window that dates with 2-digit years 28085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * are considered to fall within so that its start date is 80 years 28185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * before the current time. 28285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 28385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static void initializeSystemDefaultCentury(void); 28485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 28585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ChineseCalendar(); // default constructor not implemented 28685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 28785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 28885bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_NAMESPACE_END 28985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 29085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 29185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 29285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 29385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 295