OLD | NEW |
(Empty) | |
| 1 /* |
| 2 *******************************************************************************
* |
| 3 * Copyright (C) 2003-2008, International Business Machines Corporation |
| 4 * and others. All Rights Reserved. |
| 5 *******************************************************************************
* |
| 6 * |
| 7 * File JAPANCAL.H |
| 8 * |
| 9 * Modification History: |
| 10 * |
| 11 * Date Name Description |
| 12 * 05/13/2003 srl copied from gregocal.h |
| 13 *******************************************************************************
* |
| 14 */ |
| 15 |
| 16 #ifndef JAPANCAL_H |
| 17 #define JAPANCAL_H |
| 18 |
| 19 #include "unicode/utypes.h" |
| 20 |
| 21 #if !UCONFIG_NO_FORMATTING |
| 22 |
| 23 #include "unicode/calendar.h" |
| 24 #include "unicode/gregocal.h" |
| 25 |
| 26 U_NAMESPACE_BEGIN |
| 27 |
| 28 /** |
| 29 * Concrete class which provides the Japanese calendar. |
| 30 * <P> |
| 31 * <code>JapaneseCalendar</code> is a subclass of <code>GregorianCalendar</code> |
| 32 * that numbers years and eras based on the reigns of the Japanese emperors. |
| 33 * The Japanese calendar is identical to the Gregorian calendar in all respects |
| 34 * except for the year and era. The ascension of each emperor to the throne |
| 35 * begins a new era, and the years of that era are numbered starting with the |
| 36 * year of ascension as year 1. |
| 37 * <p> |
| 38 * Note that in the year of an imperial ascension, there are two possible sets |
| 39 * of year and era values: that for the old era and for the new. For example, a |
| 40 * new era began on January 7, 1989 AD. Strictly speaking, the first six days |
| 41 * of that year were in the Showa era, e.g. "January 6, 64 Showa", while the res
t |
| 42 * of the year was in the Heisei era, e.g. "January 7, 1 Heisei". This class |
| 43 * handles this distinction correctly when computing dates. However, in lenient |
| 44 * mode either form of date is acceptable as input. |
| 45 * <p> |
| 46 * In modern times, eras have started on January 8, 1868 AD, Gregorian (Meiji), |
| 47 * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heise
i). Constants |
| 48 * for these eras, suitable for use in the <code>UCAL_ERA</code> field, are prov
ided |
| 49 * in this class. Note that the <em>number</em> used for each era is more or |
| 50 * less arbitrary. Currently, the era starting in 1053 AD is era #0; however th
is |
| 51 * may change in the future as we add more historical data. Use the predefined |
| 52 * constants rather than using actual, absolute numbers. |
| 53 * <p> |
| 54 * @internal |
| 55 */ |
| 56 class JapaneseCalendar : public GregorianCalendar { |
| 57 public: |
| 58 |
| 59 /** |
| 60 * Useful constants for JapaneseCalendar. |
| 61 * @internal |
| 62 */ |
| 63 U_I18N_API static uint32_t U_EXPORT2 getCurrentEra(void); // the current era |
| 64 |
| 65 /** |
| 66 * Constructs a JapaneseCalendar based on the current time in the default ti
me zone |
| 67 * with the given locale. |
| 68 * |
| 69 * @param aLocale The given locale. |
| 70 * @param success Indicates the status of JapaneseCalendar object construct
ion. |
| 71 * Returns U_ZERO_ERROR if constructed successfully. |
| 72 * @stable ICU 2.0 |
| 73 */ |
| 74 JapaneseCalendar(const Locale& aLocale, UErrorCode& success); |
| 75 |
| 76 |
| 77 /** |
| 78 * Destructor |
| 79 * @internal |
| 80 */ |
| 81 virtual ~JapaneseCalendar(); |
| 82 |
| 83 /** |
| 84 * Copy constructor |
| 85 * @param source the object to be copied. |
| 86 * @internal |
| 87 */ |
| 88 JapaneseCalendar(const JapaneseCalendar& source); |
| 89 |
| 90 /** |
| 91 * Default assignment operator |
| 92 * @param right the object to be copied. |
| 93 * @internal |
| 94 */ |
| 95 JapaneseCalendar& operator=(const JapaneseCalendar& right); |
| 96 |
| 97 /** |
| 98 * Create and return a polymorphic copy of this calendar. |
| 99 * @return return a polymorphic copy of this calendar. |
| 100 * @internal |
| 101 */ |
| 102 virtual Calendar* clone(void) const; |
| 103 |
| 104 /** |
| 105 * Return the extended year defined by the current fields. In the |
| 106 * Japanese calendar case, this is equal to the equivalent extended Gregoria
n year. |
| 107 * @internal |
| 108 */ |
| 109 virtual int32_t handleGetExtendedYear(); |
| 110 |
| 111 /** |
| 112 * Return the maximum value that this field could have, given the current da
te. |
| 113 * @internal |
| 114 */ |
| 115 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& stat
us) const; |
| 116 |
| 117 |
| 118 public: |
| 119 /** |
| 120 * Override Calendar Returns a unique class ID POLYMORPHICALLY. Pure virtual |
| 121 * override. This method is to implement a simple version of RTTI, since not
all C++ |
| 122 * compilers support genuine RTTI. Polymorphic operator==() and clone() meth
ods call |
| 123 * this method. |
| 124 * |
| 125 * @return The class ID for this object. All objects of a given class have
the |
| 126 * same class ID. Objects of other classes have different class ID
s. |
| 127 * @internal |
| 128 */ |
| 129 virtual UClassID getDynamicClassID(void) const; |
| 130 |
| 131 /** |
| 132 * Return the class ID for this class. This is useful only for comparing to
a return |
| 133 * value from getDynamicClassID(). For example: |
| 134 * |
| 135 * Base* polymorphic_pointer = createPolymorphicObject(); |
| 136 * if (polymorphic_pointer->getDynamicClassID() == |
| 137 * Derived::getStaticClassID()) ... |
| 138 * |
| 139 * @return The class ID for all objects of this class. |
| 140 * @internal |
| 141 */ |
| 142 U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); |
| 143 |
| 144 /** |
| 145 * return the calendar type, "japanese". |
| 146 * |
| 147 * @return calendar type |
| 148 * @internal |
| 149 */ |
| 150 virtual const char * getType() const; |
| 151 |
| 152 /** |
| 153 * @return FALSE - no default century in Japanese |
| 154 * @internal |
| 155 */ |
| 156 virtual UBool haveDefaultCentury() const; |
| 157 |
| 158 /** |
| 159 * Not used - no default century. |
| 160 * @internal |
| 161 */ |
| 162 virtual UDate defaultCenturyStart() const; |
| 163 /** |
| 164 * Not used - no default century. |
| 165 * @internal |
| 166 */ |
| 167 virtual int32_t defaultCenturyStartYear() const; |
| 168 |
| 169 private: |
| 170 JapaneseCalendar(); // default constructor not implemented |
| 171 |
| 172 protected: |
| 173 /** |
| 174 * Calculate the era for internal computation |
| 175 * @internal |
| 176 */ |
| 177 virtual int32_t internalGetEra() const; |
| 178 |
| 179 /** |
| 180 * Compute fields from the JD |
| 181 * @internal |
| 182 */ |
| 183 virtual void handleComputeFields(int32_t julianDay, UErrorCode& status); |
| 184 |
| 185 /** |
| 186 * Calculate the limit for a specified type of limit and field |
| 187 * @internal |
| 188 */ |
| 189 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitTy
pe) const; |
| 190 |
| 191 /*** |
| 192 * Called by computeJulianDay. Returns the default month (0-based) for the
year, |
| 193 * taking year and era into account. Will return the first month of the giv
en era, if |
| 194 * the current year is an ascension year. |
| 195 * @param eyear the extended year |
| 196 * @internal |
| 197 */ |
| 198 virtual int32_t getDefaultMonthInYear(int32_t eyear); |
| 199 |
| 200 /*** |
| 201 * Called by computeJulianDay. Returns the default day (1-based) for the mo
nth, |
| 202 * taking currently-set year and era into account. Will return the first da
y of the given |
| 203 * era, if the current month is an ascension year and month. |
| 204 * @param eyear the extended year |
| 205 * @param mon the month in the year |
| 206 * @internal |
| 207 */ |
| 208 virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month); |
| 209 }; |
| 210 |
| 211 U_NAMESPACE_END |
| 212 |
| 213 #endif /* #if !UCONFIG_NO_FORMATTING */ |
| 214 |
| 215 #endif |
| 216 //eof |
| 217 |
OLD | NEW |