|
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 rest |
|
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 (Heisei). Constants |
|
48 * for these eras, suitable for use in the <code>UCAL_ERA</code> field, are provided |
|
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 this |
|
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 time zone |
|
67 * with the given locale. |
|
68 * |
|
69 * @param aLocale The given locale. |
|
70 * @param success Indicates the status of JapaneseCalendar object construction. |
|
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 Gregorian year. |
|
107 * @internal |
|
108 */ |
|
109 virtual int32_t handleGetExtendedYear(); |
|
110 |
|
111 /** |
|
112 * Return the maximum value that this field could have, given the current date. |
|
113 * @internal |
|
114 */ |
|
115 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) 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() methods 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 IDs. |
|
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 limitType) 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 given 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 month, |
|
202 * taking currently-set year and era into account. Will return the first day 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 |