chnsecal.h revision 85bf2e2fbc60a9f938064abc8127d61da7d19882
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