/src/icu/source/i18n/unicode/calendar.h
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | // © 2016 and later: Unicode, Inc. and others.  | 
2  |  | // License & terms of use: http://www.unicode.org/copyright.html  | 
3  |  | /*  | 
4  |  | ********************************************************************************  | 
5  |  | *   Copyright (C) 1997-2014, International Business Machines  | 
6  |  | *   Corporation and others.  All Rights Reserved.  | 
7  |  | ********************************************************************************  | 
8  |  | *  | 
9  |  | * File CALENDAR.H  | 
10  |  | *  | 
11  |  | * Modification History:  | 
12  |  | *  | 
13  |  | *   Date        Name        Description  | 
14  |  | *   04/22/97    aliu        Expanded and corrected comments and other header  | 
15  |  | *                           contents.  | 
16  |  | *   05/01/97    aliu        Made equals(), before(), after() arguments const.  | 
17  |  | *   05/20/97    aliu        Replaced fAreFieldsSet with fAreFieldsInSync and  | 
18  |  | *                           fAreAllFieldsSet.  | 
19  |  | *   07/27/98    stephen     Sync up with JDK 1.2  | 
20  |  | *   11/15/99    weiv        added YEAR_WOY and DOW_LOCAL  | 
21  |  | *                           to EDateFields  | 
22  |  | *    8/19/2002  srl         Removed Javaisms  | 
23  |  | *   11/07/2003  srl         Update, clean up documentation.  | 
24  |  | ********************************************************************************  | 
25  |  | */  | 
26  |  |  | 
27  |  | #ifndef CALENDAR_H  | 
28  |  | #define CALENDAR_H  | 
29  |  |  | 
30  |  | #include "unicode/utypes.h"  | 
31  |  |  | 
32  |  | #if U_SHOW_CPLUSPLUS_API  | 
33  |  |  | 
34  |  | /**  | 
35  |  |  * \file  | 
36  |  |  * \brief C++ API: Calendar object  | 
37  |  |  */  | 
38  |  | #if !UCONFIG_NO_FORMATTING  | 
39  |  |  | 
40  |  | #include "unicode/uobject.h"  | 
41  |  | #include "unicode/locid.h"  | 
42  |  | #include "unicode/timezone.h"  | 
43  |  | #include "unicode/ucal.h"  | 
44  |  | #include "unicode/umisc.h"  | 
45  |  |  | 
46  |  | U_NAMESPACE_BEGIN  | 
47  |  |  | 
48  |  | class ICUServiceFactory;  | 
49  |  |  | 
50  |  | // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API,  | 
51  |  | // it is a return type for a virtual method (@internal)  | 
52  |  | /**  | 
53  |  |  * @internal  | 
54  |  |  */  | 
55  |  | typedef int32_t UFieldResolutionTable[12][8];  | 
56  |  |  | 
57  |  | class BasicTimeZone;  | 
58  |  | /**  | 
59  |  |  * `Calendar` is an abstract base class for converting between  | 
60  |  |  * a `UDate` object and a set of integer fields such as  | 
61  |  |  * `YEAR`, `MONTH`, `DAY`, `HOUR`, and so on.  | 
62  |  |  * (A `UDate` object represents a specific instant in  | 
63  |  |  * time with millisecond precision. See UDate  | 
64  |  |  * for information about the `UDate` class.)  | 
65  |  |  *  | 
66  |  |  * Subclasses of `Calendar` interpret a `UDate`  | 
67  |  |  * according to the rules of a specific calendar system.  | 
68  |  |  * The most commonly used subclass of `Calendar` is  | 
69  |  |  * `GregorianCalendar`. Other subclasses could represent  | 
70  |  |  * the various types of lunar calendars in use in many parts of the world.  | 
71  |  |  *  | 
72  |  |  * **NOTE**: (ICU 2.6) The subclass interface should be considered unstable -  | 
73  |  |  * it WILL change.  | 
74  |  |  *  | 
75  |  |  * Like other locale-sensitive classes, `Calendar` provides a  | 
76  |  |  * static method, `createInstance`, for getting a generally useful  | 
77  |  |  * object of this type. `Calendar`'s `createInstance` method  | 
78  |  |  * returns the appropriate `Calendar` subclass whose  | 
79  |  |  * time fields have been initialized with the current date and time:  | 
80  |  |  *  | 
81  |  |  *     Calendar *rightNow = Calendar::createInstance(errCode);  | 
82  |  |  *  | 
83  |  |  * A `Calendar` object can produce all the time field values  | 
84  |  |  * needed to implement the date-time formatting for a particular language  | 
85  |  |  * and calendar style (for example, Japanese-Gregorian, Japanese-Traditional).  | 
86  |  |  *  | 
87  |  |  * When computing a `UDate` from time fields, some special circumstances  | 
88  |  |  * may arise: there may be insufficient information to compute the  | 
89  |  |  * `UDate` (such as only year and month but no day in the month),  | 
90  |  |  * there may be inconsistent information (such as "Tuesday, July 15, 1996"  | 
91  |  |  * -- July 15, 1996 is actually a Monday), or the input time might be ambiguous  | 
92  |  |  * because of time zone transition.  | 
93  |  |  *  | 
94  |  |  * **Insufficient information.** The calendar will use default  | 
95  |  |  * information to specify the missing fields. This may vary by calendar; for  | 
96  |  |  * the Gregorian calendar, the default for a field is the same as that of the  | 
97  |  |  * start of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc.  | 
98  |  |  *  | 
99  |  |  * **Inconsistent information.** If fields conflict, the calendar  | 
100  |  |  * will give preference to fields set more recently. For example, when  | 
101  |  |  * determining the day, the calendar will look for one of the following  | 
102  |  |  * combinations of fields.  The most recent combination, as determined by the  | 
103  |  |  * most recently set single field, will be used.  | 
104  |  |  *  | 
105  |  |  *     MONTH + DAY_OF_MONTH  | 
106  |  |  *     MONTH + WEEK_OF_MONTH + DAY_OF_WEEK  | 
107  |  |  *     MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK  | 
108  |  |  *     DAY_OF_YEAR  | 
109  |  |  *     DAY_OF_WEEK + WEEK_OF_YEAR  | 
110  |  |  *  | 
111  |  |  * For the time of day:  | 
112  |  |  *  | 
113  |  |  *     HOUR_OF_DAY  | 
114  |  |  *     AM_PM + HOUR  | 
115  |  |  *  | 
116  |  |  * **Ambiguous Wall Clock Time.** When time offset from UTC has  | 
117  |  |  * changed, it produces an ambiguous time slot around the transition. For example,  | 
118  |  |  * many US locations observe daylight saving time. On the date switching to daylight  | 
119  |  |  * saving time in US, wall clock time jumps from 12:59 AM (standard) to 2:00 AM  | 
120  |  |  * (daylight). Therefore, wall clock time from 1:00 AM to 1:59 AM do not exist on  | 
121  |  |  * the date. When the input wall time fall into this missing time slot, the ICU  | 
122  |  |  * Calendar resolves the time using the UTC offset before the transition by default.  | 
123  |  |  * In this example, 1:30 AM is interpreted as 1:30 AM standard time (non-exist),  | 
124  |  |  * so the final result will be 2:30 AM daylight time.  | 
125  |  |  *  | 
126  |  |  * On the date switching back to standard time, wall clock time is moved back one  | 
127  |  |  * hour at 2:00 AM. So wall clock time from 1:00 AM to 1:59 AM occur twice. In this  | 
128  |  |  * case, the ICU Calendar resolves the time using the UTC offset after the transition  | 
129  |  |  * by default. For example, 1:30 AM on the date is resolved as 1:30 AM standard time.  | 
130  |  |  *  | 
131  |  |  * Ambiguous wall clock time resolution behaviors can be customized by Calendar APIs  | 
132  |  |  * {@link #setRepeatedWallTimeOption} and {@link #setSkippedWallTimeOption}. | 
133  |  |  * These methods are available in ICU 49 or later versions.  | 
134  |  |  *  | 
135  |  |  * **Note:** for some non-Gregorian calendars, different  | 
136  |  |  * fields may be necessary for complete disambiguation. For example, a full  | 
137  |  |  * specification of the historical Arabic astronomical calendar requires year,  | 
138  |  |  * month, day-of-month *and* day-of-week in some cases.  | 
139  |  |  *  | 
140  |  |  * **Note:** There are certain possible ambiguities in  | 
141  |  |  * interpretation of certain singular times, which are resolved in the  | 
142  |  |  * following ways:  | 
143  |  |  *  | 
144  |  |  *   1. 24:00:00 "belongs" to the following day. That is,  | 
145  |  |  *      23:59 on Dec 31, 1969 < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970  | 
146  |  |  *   2. Although historically not precise, midnight also belongs to "am",  | 
147  |  |  *      and noon belongs to "pm", so on the same day,  | 
148  |  |  *      12:00 am (midnight) < 12:01 am, and 12:00 pm (noon) < 12:01 pm  | 
149  |  |  *  | 
150  |  |  * The date or time format strings are not part of the definition of a  | 
151  |  |  * calendar, as those must be modifiable or overridable by the user at  | 
152  |  |  * runtime. Use `DateFormat` to format dates.  | 
153  |  |  *  | 
154  |  |  * `Calendar` provides an API for field "rolling", where fields  | 
155  |  |  * can be incremented or decremented, but wrap around. For example, rolling the  | 
156  |  |  * month up in the date December 12, **1996** results in  | 
157  |  |  * January 12, **1996**.  | 
158  |  |  *  | 
159  |  |  * `Calendar` also provides a date arithmetic function for  | 
160  |  |  * adding the specified (signed) amount of time to a particular time field.  | 
161  |  |  * For example, subtracting 5 days from the date `September 12, 1996`  | 
162  |  |  * results in `September 7, 1996`.  | 
163  |  |  *  | 
164  |  |  * ***Supported range***  | 
165  |  |  *  | 
166  |  |  * The allowable range of `Calendar` has been narrowed. `GregorianCalendar` used  | 
167  |  |  * to attempt to support the range of dates with millisecond values from  | 
168  |  |  * `Long.MIN_VALUE` to `Long.MAX_VALUE`. The new `Calendar` protocol specifies the  | 
169  |  |  * maximum range of supportable dates as those having Julian day numbers  | 
170  |  |  * of `-0x7F000000` to `+0x7F000000`. This corresponds to years from ~5,800,000 BCE  | 
171  |  |  * to ~5,800,000 CE. Programmers should use the protected constants in `Calendar` to  | 
172  |  |  * specify an extremely early or extremely late date.  | 
173  |  |  *  | 
174  |  |  * <p>  | 
175  |  |  * The Japanese calendar uses a combination of era name and year number.  | 
176  |  |  * When an emperor of Japan abdicates and a new emperor ascends the throne,  | 
177  |  |  * a new era is declared and year number is reset to 1. Even if the date of  | 
178  |  |  * abdication is scheduled ahead of time, the new era name might not be  | 
179  |  |  * announced until just before the date. In such case, ICU4C may include  | 
180  |  |  * a start date of future era without actual era name, but not enabled  | 
181  |  |  * by default. ICU4C users who want to test the behavior of the future era  | 
182  |  |  * can enable the tentative era by:  | 
183  |  |  * <ul>  | 
184  |  |  * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>  | 
185  |  |  * </ul>  | 
186  |  |  *  | 
187  |  |  * @stable ICU 2.0  | 
188  |  |  */  | 
189  |  | class U_I18N_API Calendar : public UObject { | 
190  |  | public:  | 
191  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
192  |  |     /**  | 
193  |  |      * Field IDs for date and time. Used to specify date/time fields. ERA is calendar  | 
194  |  |      * specific. Example ranges given are for illustration only; see specific Calendar  | 
195  |  |      * subclasses for actual ranges.  | 
196  |  |      * @deprecated ICU 2.6. Use C enum UCalendarDateFields defined in ucal.h  | 
197  |  |      */  | 
198  |  |     enum EDateFields { | 
199  |  | #ifndef U_HIDE_DEPRECATED_API  | 
200  |  | /*  | 
201  |  |  * ERA may be defined on other platforms. To avoid any potential problems undefined it here.  | 
202  |  |  */  | 
203  |  | #ifdef ERA  | 
204  |  | #undef ERA  | 
205  |  | #endif  | 
206  |  |         ERA,                  // Example: 0..1  | 
207  |  |         YEAR,                 // Example: 1..big number  | 
208  |  |         MONTH,                // Example: 0..11  | 
209  |  |         WEEK_OF_YEAR,         // Example: 1..53  | 
210  |  |         WEEK_OF_MONTH,        // Example: 1..4  | 
211  |  |         DATE,                 // Example: 1..31  | 
212  |  |         DAY_OF_YEAR,          // Example: 1..365  | 
213  |  |         DAY_OF_WEEK,          // Example: 1..7  | 
214  |  |         DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1  | 
215  |  |         AM_PM,                // Example: 0..1  | 
216  |  |         HOUR,                 // Example: 0..11  | 
217  |  |         HOUR_OF_DAY,          // Example: 0..23  | 
218  |  |         MINUTE,               // Example: 0..59  | 
219  |  |         SECOND,               // Example: 0..59  | 
220  |  |         MILLISECOND,          // Example: 0..999  | 
221  |  |         ZONE_OFFSET,          // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR  | 
222  |  |         DST_OFFSET,           // Example: 0 or U_MILLIS_PER_HOUR  | 
223  |  |         YEAR_WOY,             // 'Y' Example: 1..big number - Year of Week of Year  | 
224  |  |         DOW_LOCAL,            // 'e' Example: 1..7 - Day of Week / Localized  | 
225  |  |  | 
226  |  |         EXTENDED_YEAR,  | 
227  |  |         JULIAN_DAY,  | 
228  |  |         MILLISECONDS_IN_DAY,  | 
229  |  |         IS_LEAP_MONTH,  | 
230  |  |  | 
231  |  |         FIELD_COUNT = UCAL_FIELD_COUNT // See ucal.h for other fields.  | 
232  |  | #endif /* U_HIDE_DEPRECATED_API */  | 
233  |  |     };  | 
234  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
235  |  |  | 
236  |  | #ifndef U_HIDE_DEPRECATED_API  | 
237  |  |     /**  | 
238  |  |      * Useful constant for days of week. Note: Calendar day-of-week is 1-based. Clients  | 
239  |  |      * who create locale resources for the field of first-day-of-week should be aware of  | 
240  |  |      * this. For instance, in US locale, first-day-of-week is set to 1, i.e., SUNDAY.  | 
241  |  |      * @deprecated ICU 2.6. Use C enum UCalendarDaysOfWeek defined in ucal.h  | 
242  |  |      */  | 
243  |  |     enum EDaysOfWeek { | 
244  |  |         SUNDAY = 1,  | 
245  |  |         MONDAY,  | 
246  |  |         TUESDAY,  | 
247  |  |         WEDNESDAY,  | 
248  |  |         THURSDAY,  | 
249  |  |         FRIDAY,  | 
250  |  |         SATURDAY  | 
251  |  |     };  | 
252  |  |  | 
253  |  |     /**  | 
254  |  |      * Useful constants for month. Note: Calendar month is 0-based.  | 
255  |  |      * @deprecated ICU 2.6. Use C enum UCalendarMonths defined in ucal.h  | 
256  |  |      */  | 
257  |  |     enum EMonths { | 
258  |  |         JANUARY,  | 
259  |  |         FEBRUARY,  | 
260  |  |         MARCH,  | 
261  |  |         APRIL,  | 
262  |  |         MAY,  | 
263  |  |         JUNE,  | 
264  |  |         JULY,  | 
265  |  |         AUGUST,  | 
266  |  |         SEPTEMBER,  | 
267  |  |         OCTOBER,  | 
268  |  |         NOVEMBER,  | 
269  |  |         DECEMBER,  | 
270  |  |         UNDECIMBER  | 
271  |  |     };  | 
272  |  |  | 
273  |  |     /**  | 
274  |  |      * Useful constants for hour in 12-hour clock. Used in GregorianCalendar.  | 
275  |  |      * @deprecated ICU 2.6. Use C enum UCalendarAMPMs defined in ucal.h  | 
276  |  |      */  | 
277  |  |     enum EAmpm { | 
278  |  |         AM,  | 
279  |  |         PM  | 
280  |  |     };  | 
281  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
282  |  |  | 
283  |  |     /**  | 
284  |  |      * destructor  | 
285  |  |      * @stable ICU 2.0  | 
286  |  |      */  | 
287  |  |     virtual ~Calendar();  | 
288  |  |  | 
289  |  |     /**  | 
290  |  |      * Create and return a polymorphic copy of this calendar.  | 
291  |  |      *  | 
292  |  |      * @return    a polymorphic copy of this calendar.  | 
293  |  |      * @stable ICU 2.0  | 
294  |  |      */  | 
295  |  |     virtual Calendar* clone() const = 0;  | 
296  |  |  | 
297  |  |     /**  | 
298  |  |      * Creates a Calendar using the default timezone and locale. Clients are responsible  | 
299  |  |      * for deleting the object returned.  | 
300  |  |      *  | 
301  |  |      * @param success  Indicates the success/failure of Calendar creation. Filled in  | 
302  |  |      *                 with U_ZERO_ERROR if created successfully, set to a failure result  | 
303  |  |      *                 otherwise. U_MISSING_RESOURCE_ERROR will be returned if the resource data  | 
304  |  |      *                 requests a calendar type which has not been installed.  | 
305  |  |      * @return         A Calendar if created successfully. NULL otherwise.  | 
306  |  |      * @stable ICU 2.0  | 
307  |  |      */  | 
308  |  |     static Calendar* U_EXPORT2 createInstance(UErrorCode& success);  | 
309  |  |  | 
310  |  |     /**  | 
311  |  |      * Creates a Calendar using the given timezone and the default locale.  | 
312  |  |      * The Calendar takes ownership of zoneToAdopt; the  | 
313  |  |      * client must not delete it.  | 
314  |  |      *  | 
315  |  |      * @param zoneToAdopt  The given timezone to be adopted.  | 
316  |  |      * @param success      Indicates the success/failure of Calendar creation. Filled in  | 
317  |  |      *                     with U_ZERO_ERROR if created successfully, set to a failure result  | 
318  |  |      *                     otherwise.  | 
319  |  |      * @return             A Calendar if created successfully. NULL otherwise.  | 
320  |  |      * @stable ICU 2.0  | 
321  |  |      */  | 
322  |  |     static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, UErrorCode& success);  | 
323  |  |  | 
324  |  |     /**  | 
325  |  |      * Creates a Calendar using the given timezone and the default locale.  The TimeZone  | 
326  |  |      * is _not_ adopted; the client is still responsible for deleting it.  | 
327  |  |      *  | 
328  |  |      * @param zone  The timezone.  | 
329  |  |      * @param success      Indicates the success/failure of Calendar creation. Filled in  | 
330  |  |      *                     with U_ZERO_ERROR if created successfully, set to a failure result  | 
331  |  |      *                     otherwise.  | 
332  |  |      * @return             A Calendar if created successfully. NULL otherwise.  | 
333  |  |      * @stable ICU 2.0  | 
334  |  |      */  | 
335  |  |     static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, UErrorCode& success);  | 
336  |  |  | 
337  |  |     /**  | 
338  |  |      * Creates a Calendar using the default timezone and the given locale.  | 
339  |  |      *  | 
340  |  |      * @param aLocale  The given locale.  | 
341  |  |      * @param success  Indicates the success/failure of Calendar creation. Filled in  | 
342  |  |      *                 with U_ZERO_ERROR if created successfully, set to a failure result  | 
343  |  |      *                 otherwise.  | 
344  |  |      * @return         A Calendar if created successfully. NULL otherwise.  | 
345  |  |      * @stable ICU 2.0  | 
346  |  |      */  | 
347  |  |     static Calendar* U_EXPORT2 createInstance(const Locale& aLocale, UErrorCode& success);  | 
348  |  |  | 
349  |  |     /**  | 
350  |  |      * Creates a Calendar using the given timezone and given locale.  | 
351  |  |      * The Calendar takes ownership of zoneToAdopt; the  | 
352  |  |      * client must not delete it.  | 
353  |  |      *  | 
354  |  |      * @param zoneToAdopt  The given timezone to be adopted.  | 
355  |  |      * @param aLocale      The given locale.  | 
356  |  |      * @param success      Indicates the success/failure of Calendar creation. Filled in  | 
357  |  |      *                     with U_ZERO_ERROR if created successfully, set to a failure result  | 
358  |  |      *                     otherwise.  | 
359  |  |      * @return             A Calendar if created successfully. NULL otherwise.  | 
360  |  |      * @stable ICU 2.0  | 
361  |  |      */  | 
362  |  |     static Calendar* U_EXPORT2 createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);  | 
363  |  |  | 
364  |  |     /**  | 
365  |  |      * Gets a Calendar using the given timezone and given locale.  The TimeZone  | 
366  |  |      * is _not_ adopted; the client is still responsible for deleting it.  | 
367  |  |      *  | 
368  |  |      * @param zone         The given timezone.  | 
369  |  |      * @param aLocale      The given locale.  | 
370  |  |      * @param success      Indicates the success/failure of Calendar creation. Filled in  | 
371  |  |      *                     with U_ZERO_ERROR if created successfully, set to a failure result  | 
372  |  |      *                     otherwise.  | 
373  |  |      * @return             A Calendar if created successfully. NULL otherwise.  | 
374  |  |      * @stable ICU 2.0  | 
375  |  |      */  | 
376  |  |     static Calendar* U_EXPORT2 createInstance(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);  | 
377  |  |  | 
378  |  |     /**  | 
379  |  |      * Returns a list of the locales for which Calendars are installed.  | 
380  |  |      *  | 
381  |  |      * @param count  Number of locales returned.  | 
382  |  |      * @return       An array of Locale objects representing the set of locales for which  | 
383  |  |      *               Calendars are installed.  The system retains ownership of this list;  | 
384  |  |      *               the caller must NOT delete it. Does not include user-registered Calendars.  | 
385  |  |      * @stable ICU 2.0  | 
386  |  |      */  | 
387  |  |     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);  | 
388  |  |  | 
389  |  |  | 
390  |  |     /**  | 
391  |  |      * Given a key and a locale, returns an array of string values in a preferred  | 
392  |  |      * order that would make a difference. These are all and only those values where  | 
393  |  |      * the open (creation) of the service with the locale formed from the input locale  | 
394  |  |      * plus input keyword and that value has different behavior than creation with the  | 
395  |  |      * input locale alone.  | 
396  |  |      * @param key           one of the keys supported by this service.  For now, only  | 
397  |  |      *                      "calendar" is supported.  | 
398  |  |      * @param locale        the locale  | 
399  |  |      * @param commonlyUsed  if set to true it will return only commonly used values  | 
400  |  |      *                      with the given locale in preferred order.  Otherwise,  | 
401  |  |      *                      it will return all the available values for the locale.  | 
402  |  |      * @param status        ICU Error Code  | 
403  |  |      * @return a string enumeration over keyword values for the given key and the locale.  | 
404  |  |      * @stable ICU 4.2  | 
405  |  |      */  | 
406  |  |     static StringEnumeration* U_EXPORT2 getKeywordValuesForLocale(const char* key,  | 
407  |  |                     const Locale& locale, UBool commonlyUsed, UErrorCode& status);  | 
408  |  |  | 
409  |  |     /**  | 
410  |  |      * Returns the current UTC (GMT) time measured in milliseconds since 0:00:00 on 1/1/70  | 
411  |  |      * (derived from the system time).  | 
412  |  |      *  | 
413  |  |      * @return   The current UTC time in milliseconds.  | 
414  |  |      * @stable ICU 2.0  | 
415  |  |      */  | 
416  |  |     static UDate U_EXPORT2 getNow(void);  | 
417  |  |  | 
418  |  |     /**  | 
419  |  |      * Gets this Calendar's time as milliseconds. May involve recalculation of time due  | 
420  |  |      * to previous calls to set time field values. The time specified is non-local UTC  | 
421  |  |      * (GMT) time. Although this method is const, this object may actually be changed  | 
422  |  |      * (semantically const).  | 
423  |  |      *  | 
424  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
425  |  |      *                previously set in the time field is invalid or restricted by  | 
426  |  |      *                leniency, this will be set to an error status.  | 
427  |  |      * @return        The current time in UTC (GMT) time, or zero if the operation  | 
428  |  |      *                failed.  | 
429  |  |      * @stable ICU 2.0  | 
430  |  |      */  | 
431  | 0  |     inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); } | 
432  |  |  | 
433  |  |     /**  | 
434  |  |      * Sets this Calendar's current time with the given UDate. The time specified should  | 
435  |  |      * be in non-local UTC (GMT) time.  | 
436  |  |      *  | 
437  |  |      * @param date  The given UDate in UTC (GMT) time.  | 
438  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
439  |  |      *                set in the time field is invalid or restricted by  | 
440  |  |      *                leniency, this will be set to an error status.  | 
441  |  |      * @stable ICU 2.0  | 
442  |  |      */  | 
443  | 0  |     inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); } | 
444  |  |  | 
445  |  |     /**  | 
446  |  |      * Compares the equality of two Calendar objects. Objects of different subclasses  | 
447  |  |      * are considered unequal. This comparison is very exacting; two Calendar objects  | 
448  |  |      * must be in exactly the same state to be considered equal. To compare based on the  | 
449  |  |      * represented time, use equals() instead.  | 
450  |  |      *  | 
451  |  |      * @param that  The Calendar object to be compared with.  | 
452  |  |      * @return      true if the given Calendar is the same as this Calendar; false  | 
453  |  |      *              otherwise.  | 
454  |  |      * @stable ICU 2.0  | 
455  |  |      */  | 
456  |  |     virtual bool operator==(const Calendar& that) const;  | 
457  |  |  | 
458  |  |     /**  | 
459  |  |      * Compares the inequality of two Calendar objects.  | 
460  |  |      *  | 
461  |  |      * @param that  The Calendar object to be compared with.  | 
462  |  |      * @return      true if the given Calendar is not the same as this Calendar; false  | 
463  |  |      *              otherwise.  | 
464  |  |      * @stable ICU 2.0  | 
465  |  |      */  | 
466  | 0  |     bool operator!=(const Calendar& that) const {return !operator==(that);} | 
467  |  |  | 
468  |  |     /**  | 
469  |  |      * Returns true if the given Calendar object is equivalent to this  | 
470  |  |      * one.  An equivalent Calendar will behave exactly as this one  | 
471  |  |      * does, but it may be set to a different time.  By contrast, for  | 
472  |  |      * the operator==() method to return true, the other Calendar must  | 
473  |  |      * be set to the same time.  | 
474  |  |      *  | 
475  |  |      * @param other the Calendar to be compared with this Calendar  | 
476  |  |      * @stable ICU 2.4  | 
477  |  |      */  | 
478  |  |     virtual UBool isEquivalentTo(const Calendar& other) const;  | 
479  |  |  | 
480  |  |     /**  | 
481  |  |      * Compares the Calendar time, whereas Calendar::operator== compares the equality of  | 
482  |  |      * Calendar objects.  | 
483  |  |      *  | 
484  |  |      * @param when    The Calendar to be compared with this Calendar. Although this is a  | 
485  |  |      *                const parameter, the object may be modified physically  | 
486  |  |      *                (semantically const).  | 
487  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
488  |  |      *                previously set in the time field is invalid or restricted by  | 
489  |  |      *                leniency, this will be set to an error status.  | 
490  |  |      * @return        True if the current time of this Calendar is equal to the time of  | 
491  |  |      *                Calendar when; false otherwise.  | 
492  |  |      * @stable ICU 2.0  | 
493  |  |      */  | 
494  |  |     UBool equals(const Calendar& when, UErrorCode& status) const;  | 
495  |  |  | 
496  |  |     /**  | 
497  |  |      * Returns true if this Calendar's current time is before "when"'s current time.  | 
498  |  |      *  | 
499  |  |      * @param when    The Calendar to be compared with this Calendar. Although this is a  | 
500  |  |      *                const parameter, the object may be modified physically  | 
501  |  |      *                (semantically const).  | 
502  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
503  |  |      *                previously set in the time field is invalid or restricted by  | 
504  |  |      *                leniency, this will be set to an error status.  | 
505  |  |      * @return        True if the current time of this Calendar is before the time of  | 
506  |  |      *                Calendar when; false otherwise.  | 
507  |  |      * @stable ICU 2.0  | 
508  |  |      */  | 
509  |  |     UBool before(const Calendar& when, UErrorCode& status) const;  | 
510  |  |  | 
511  |  |     /**  | 
512  |  |      * Returns true if this Calendar's current time is after "when"'s current time.  | 
513  |  |      *  | 
514  |  |      * @param when    The Calendar to be compared with this Calendar. Although this is a  | 
515  |  |      *                const parameter, the object may be modified physically  | 
516  |  |      *                (semantically const).  | 
517  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
518  |  |      *                previously set in the time field is invalid or restricted by  | 
519  |  |      *                leniency, this will be set to an error status.  | 
520  |  |      * @return        True if the current time of this Calendar is after the time of  | 
521  |  |      *                Calendar when; false otherwise.  | 
522  |  |      * @stable ICU 2.0  | 
523  |  |      */  | 
524  |  |     UBool after(const Calendar& when, UErrorCode& status) const;  | 
525  |  |  | 
526  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
527  |  |     /**  | 
528  |  |      * UDate Arithmetic function. Adds the specified (signed) amount of time to the given  | 
529  |  |      * time field, based on the calendar's rules. For example, to subtract 5 days from  | 
530  |  |      * the current time of the calendar, call add(Calendar::DATE, -5). When adding on  | 
531  |  |      * the month or Calendar::MONTH field, other fields like date might conflict and  | 
532  |  |      * need to be changed. For instance, adding 1 month on the date 01/31/96 will result  | 
533  |  |      * in 02/29/96.  | 
534  |  |      * Adding a positive value always means moving forward in time, so for the Gregorian calendar,  | 
535  |  |      * starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces  | 
536  |  |      * the numeric value of the field itself).  | 
537  |  |      *  | 
538  |  |      * @param field   Specifies which date field to modify.  | 
539  |  |      * @param amount  The amount of time to be added to the field, in the natural unit  | 
540  |  |      *                for that field (e.g., days for the day fields, hours for the hour  | 
541  |  |      *                field.)  | 
542  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
543  |  |      *                previously set in the time field is invalid or restricted by  | 
544  |  |      *                leniency, this will be set to an error status.  | 
545  |  |      * @deprecated ICU 2.6. use add(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.  | 
546  |  |      */  | 
547  |  |     virtual void add(EDateFields field, int32_t amount, UErrorCode& status);  | 
548  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
549  |  |  | 
550  |  |     /**  | 
551  |  |      * UDate Arithmetic function. Adds the specified (signed) amount of time to the given  | 
552  |  |      * time field, based on the calendar's rules. For example, to subtract 5 days from  | 
553  |  |      * the current time of the calendar, call add(Calendar::DATE, -5). When adding on  | 
554  |  |      * the month or Calendar::MONTH field, other fields like date might conflict and  | 
555  |  |      * need to be changed. For instance, adding 1 month on the date 01/31/96 will result  | 
556  |  |      * in 02/29/96.  | 
557  |  |      * Adding a positive value always means moving forward in time, so for the Gregorian calendar,  | 
558  |  |      * starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces  | 
559  |  |      * the numeric value of the field itself).  | 
560  |  |      *  | 
561  |  |      * @param field   Specifies which date field to modify.  | 
562  |  |      * @param amount  The amount of time to be added to the field, in the natural unit  | 
563  |  |      *                for that field (e.g., days for the day fields, hours for the hour  | 
564  |  |      *                field.)  | 
565  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
566  |  |      *                previously set in the time field is invalid or restricted by  | 
567  |  |      *                leniency, this will be set to an error status.  | 
568  |  |      * @stable ICU 2.6.  | 
569  |  |      */  | 
570  |  |     virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status);  | 
571  |  |  | 
572  |  | #ifndef U_HIDE_DEPRECATED_API  | 
573  |  |     /**  | 
574  |  |      * Time Field Rolling function. Rolls (up/down) a single unit of time on the given  | 
575  |  |      * time field. For example, to roll the current date up by one day, call  | 
576  |  |      * roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it  | 
577  |  |      * will roll the year value in the range between getMinimum(Calendar::YEAR) and the  | 
578  |  |      * value returned by getMaximum(Calendar::YEAR). When rolling on the month or  | 
579  |  |      * Calendar::MONTH field, other fields like date might conflict and, need to be  | 
580  |  |      * changed. For instance, rolling the month up on the date 01/31/96 will result in  | 
581  |  |      * 02/29/96. Rolling up always means rolling forward in time (unless the limit of the  | 
582  |  |      * field is reached, in which case it may pin or wrap), so for Gregorian calendar,  | 
583  |  |      * starting with 100 BC and rolling the year up results in 99 BC.  | 
584  |  |      * When eras have a definite beginning and end (as in the Chinese calendar, or as in  | 
585  |  |      * most eras in the Japanese calendar) then rolling the year past either limit of the  | 
586  |  |      * era will cause the year to wrap around. When eras only have a limit at one end,  | 
587  |  |      * then attempting to roll the year past that limit will result in pinning the year  | 
588  |  |      * at that limit. Note that for most calendars in which era 0 years move forward in  | 
589  |  |      * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to  | 
590  |  |      * result in negative years for era 0 (that is the only way to represent years before  | 
591  |  |      * the calendar epoch).  | 
592  |  |      * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the  | 
593  |  |      * hour value in the range between 0 and 23, which is zero-based.  | 
594  |  |      * <P>  | 
595  |  |      * NOTE: Do not use this method -- use roll(EDateFields, int, UErrorCode&) instead.  | 
596  |  |      *  | 
597  |  |      * @param field   The time field.  | 
598  |  |      * @param up      Indicates if the value of the specified time field is to be rolled  | 
599  |  |      *                up or rolled down. Use true if rolling up, false otherwise.  | 
600  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
601  |  |      *                previously set in the time field is invalid or restricted by  | 
602  |  |      *                leniency, this will be set to an error status.  | 
603  |  |      * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, UBool up, UErrorCode& status) instead.  | 
604  |  |      */  | 
605  |  |     inline void roll(EDateFields field, UBool up, UErrorCode& status);  | 
606  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
607  |  |  | 
608  |  |     /**  | 
609  |  |      * Time Field Rolling function. Rolls (up/down) a single unit of time on the given  | 
610  |  |      * time field. For example, to roll the current date up by one day, call  | 
611  |  |      * roll(Calendar::DATE, true). When rolling on the year or Calendar::YEAR field, it  | 
612  |  |      * will roll the year value in the range between getMinimum(Calendar::YEAR) and the  | 
613  |  |      * value returned by getMaximum(Calendar::YEAR). When rolling on the month or  | 
614  |  |      * Calendar::MONTH field, other fields like date might conflict and, need to be  | 
615  |  |      * changed. For instance, rolling the month up on the date 01/31/96 will result in  | 
616  |  |      * 02/29/96. Rolling up always means rolling forward in time (unless the limit of the  | 
617  |  |      * field is reached, in which case it may pin or wrap), so for Gregorian calendar,  | 
618  |  |      * starting with 100 BC and rolling the year up results in 99 BC.  | 
619  |  |      * When eras have a definite beginning and end (as in the Chinese calendar, or as in  | 
620  |  |      * most eras in the Japanese calendar) then rolling the year past either limit of the  | 
621  |  |      * era will cause the year to wrap around. When eras only have a limit at one end,  | 
622  |  |      * then attempting to roll the year past that limit will result in pinning the year  | 
623  |  |      * at that limit. Note that for most calendars in which era 0 years move forward in  | 
624  |  |      * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to  | 
625  |  |      * result in negative years for era 0 (that is the only way to represent years before  | 
626  |  |      * the calendar epoch).  | 
627  |  |      * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the  | 
628  |  |      * hour value in the range between 0 and 23, which is zero-based.  | 
629  |  |      * <P>  | 
630  |  |      * NOTE: Do not use this method -- use roll(UCalendarDateFields, int, UErrorCode&) instead.  | 
631  |  |      *  | 
632  |  |      * @param field   The time field.  | 
633  |  |      * @param up      Indicates if the value of the specified time field is to be rolled  | 
634  |  |      *                up or rolled down. Use true if rolling up, false otherwise.  | 
635  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
636  |  |      *                previously set in the time field is invalid or restricted by  | 
637  |  |      *                leniency, this will be set to an error status.  | 
638  |  |      * @stable ICU 2.6.  | 
639  |  |      */  | 
640  |  |     inline void roll(UCalendarDateFields field, UBool up, UErrorCode& status);  | 
641  |  |  | 
642  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
643  |  |     /**  | 
644  |  |      * Time Field Rolling function. Rolls by the given amount on the given  | 
645  |  |      * time field. For example, to roll the current date up by one day, call  | 
646  |  |      * roll(Calendar::DATE, +1, status). When rolling on the month or  | 
647  |  |      * Calendar::MONTH field, other fields like date might conflict and, need to be  | 
648  |  |      * changed. For instance, rolling the month up on the date 01/31/96 will result in  | 
649  |  |      * 02/29/96. Rolling by a positive value always means rolling forward in time (unless  | 
650  |  |      * the limit of the field is reached, in which case it may pin or wrap), so for  | 
651  |  |      * Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC.  | 
652  |  |      * When eras have a definite beginning and end (as in the Chinese calendar, or as in  | 
653  |  |      * most eras in the Japanese calendar) then rolling the year past either limit of the  | 
654  |  |      * era will cause the year to wrap around. When eras only have a limit at one end,  | 
655  |  |      * then attempting to roll the year past that limit will result in pinning the year  | 
656  |  |      * at that limit. Note that for most calendars in which era 0 years move forward in  | 
657  |  |      * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to  | 
658  |  |      * result in negative years for era 0 (that is the only way to represent years before  | 
659  |  |      * the calendar epoch).  | 
660  |  |      * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the  | 
661  |  |      * hour value in the range between 0 and 23, which is zero-based.  | 
662  |  |      * <P>  | 
663  |  |      * The only difference between roll() and add() is that roll() does not change  | 
664  |  |      * the value of more significant fields when it reaches the minimum or maximum  | 
665  |  |      * of its range, whereas add() does.  | 
666  |  |      *  | 
667  |  |      * @param field   The time field.  | 
668  |  |      * @param amount  Indicates amount to roll.  | 
669  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
670  |  |      *                previously set in the time field is invalid, this will be set to  | 
671  |  |      *                an error status.  | 
672  |  |      * @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.  | 
673  |  |      */  | 
674  |  |     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);  | 
675  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
676  |  |  | 
677  |  |     /**  | 
678  |  |      * Time Field Rolling function. Rolls by the given amount on the given  | 
679  |  |      * time field. For example, to roll the current date up by one day, call  | 
680  |  |      * roll(Calendar::DATE, +1, status). When rolling on the month or  | 
681  |  |      * Calendar::MONTH field, other fields like date might conflict and, need to be  | 
682  |  |      * changed. For instance, rolling the month up on the date 01/31/96 will result in  | 
683  |  |      * 02/29/96. Rolling by a positive value always means rolling forward in time (unless  | 
684  |  |      * the limit of the field is reached, in which case it may pin or wrap), so for  | 
685  |  |      * Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC.  | 
686  |  |      * When eras have a definite beginning and end (as in the Chinese calendar, or as in  | 
687  |  |      * most eras in the Japanese calendar) then rolling the year past either limit of the  | 
688  |  |      * era will cause the year to wrap around. When eras only have a limit at one end,  | 
689  |  |      * then attempting to roll the year past that limit will result in pinning the year  | 
690  |  |      * at that limit. Note that for most calendars in which era 0 years move forward in  | 
691  |  |      * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to  | 
692  |  |      * result in negative years for era 0 (that is the only way to represent years before  | 
693  |  |      * the calendar epoch).  | 
694  |  |      * When rolling on the hour-in-day or Calendar::HOUR_OF_DAY field, it will roll the  | 
695  |  |      * hour value in the range between 0 and 23, which is zero-based.  | 
696  |  |      * <P>  | 
697  |  |      * The only difference between roll() and add() is that roll() does not change  | 
698  |  |      * the value of more significant fields when it reaches the minimum or maximum  | 
699  |  |      * of its range, whereas add() does.  | 
700  |  |      *  | 
701  |  |      * @param field   The time field.  | 
702  |  |      * @param amount  Indicates amount to roll.  | 
703  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
704  |  |      *                previously set in the time field is invalid, this will be set to  | 
705  |  |      *                an error status.  | 
706  |  |      * @stable ICU 2.6.  | 
707  |  |      */  | 
708  |  |     virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);  | 
709  |  |  | 
710  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
711  |  |     /**  | 
712  |  |      * Return the difference between the given time and the time this  | 
713  |  |      * calendar object is set to.  If this calendar is set  | 
714  |  |      * <em>before</em> the given time, the returned value will be  | 
715  |  |      * positive.  If this calendar is set <em>after</em> the given  | 
716  |  |      * time, the returned value will be negative.  The  | 
717  |  |      * <code>field</code> parameter specifies the units of the return  | 
718  |  |      * value.  For example, if <code>fieldDifference(when,  | 
719  |  |      * Calendar::MONTH)</code> returns 3, then this calendar is set to  | 
720  |  |      * 3 months before <code>when</code>, and possibly some addition  | 
721  |  |      * time less than one month.  | 
722  |  |      *  | 
723  |  |      * <p>As a side effect of this call, this calendar is advanced  | 
724  |  |      * toward <code>when</code> by the given amount.  That is, calling  | 
725  |  |      * this method has the side effect of calling <code>add(field,  | 
726  |  |      * n)</code>, where <code>n</code> is the return value.  | 
727  |  |      *  | 
728  |  |      * <p>Usage: To use this method, call it first with the largest  | 
729  |  |      * field of interest, then with progressively smaller fields.  For  | 
730  |  |      * example:  | 
731  |  |      *  | 
732  |  |      * <pre>  | 
733  |  |      * int y = cal->fieldDifference(when, Calendar::YEAR, err);  | 
734  |  |      * int m = cal->fieldDifference(when, Calendar::MONTH, err);  | 
735  |  |      * int d = cal->fieldDifference(when, Calendar::DATE, err);</pre>  | 
736  |  |      *  | 
737  |  |      * computes the difference between <code>cal</code> and  | 
738  |  |      * <code>when</code> in years, months, and days.  | 
739  |  |      *  | 
740  |  |      * <p>Note: <code>fieldDifference()</code> is  | 
741  |  |      * <em>asymmetrical</em>.  That is, in the following code:  | 
742  |  |      *  | 
743  |  |      * <pre>  | 
744  |  |      * cal->setTime(date1, err);  | 
745  |  |      * int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);  | 
746  |  |      * int d1 = cal->fieldDifference(date2, Calendar::DATE, err);  | 
747  |  |      * cal->setTime(date2, err);  | 
748  |  |      * int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);  | 
749  |  |      * int d2 = cal->fieldDifference(date1, Calendar::DATE, err);</pre>  | 
750  |  |      *  | 
751  |  |      * one might expect that <code>m1 == -m2 && d1 == -d2</code>.  | 
752  |  |      * However, this is not generally the case, because of  | 
753  |  |      * irregularities in the underlying calendar system (e.g., the  | 
754  |  |      * Gregorian calendar has a varying number of days per month).  | 
755  |  |      *  | 
756  |  |      * @param when the date to compare this calendar's time to  | 
757  |  |      * @param field the field in which to compute the result  | 
758  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
759  |  |      *                previously set in the time field is invalid, this will be set to  | 
760  |  |      *                an error status.  | 
761  |  |      * @return the difference, either positive or negative, between  | 
762  |  |      * this calendar's time and <code>when</code>, in terms of  | 
763  |  |      * <code>field</code>.  | 
764  |  |      * @deprecated ICU 2.6. Use fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status).  | 
765  |  |      */  | 
766  |  |     virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status);  | 
767  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
768  |  |  | 
769  |  |     /**  | 
770  |  |      * Return the difference between the given time and the time this  | 
771  |  |      * calendar object is set to.  If this calendar is set  | 
772  |  |      * <em>before</em> the given time, the returned value will be  | 
773  |  |      * positive.  If this calendar is set <em>after</em> the given  | 
774  |  |      * time, the returned value will be negative.  The  | 
775  |  |      * <code>field</code> parameter specifies the units of the return  | 
776  |  |      * value.  For example, if <code>fieldDifference(when,  | 
777  |  |      * Calendar::MONTH)</code> returns 3, then this calendar is set to  | 
778  |  |      * 3 months before <code>when</code>, and possibly some addition  | 
779  |  |      * time less than one month.  | 
780  |  |      *  | 
781  |  |      * <p>As a side effect of this call, this calendar is advanced  | 
782  |  |      * toward <code>when</code> by the given amount.  That is, calling  | 
783  |  |      * this method has the side effect of calling <code>add(field,  | 
784  |  |      * n)</code>, where <code>n</code> is the return value.  | 
785  |  |      *  | 
786  |  |      * <p>Usage: To use this method, call it first with the largest  | 
787  |  |      * field of interest, then with progressively smaller fields.  For  | 
788  |  |      * example:  | 
789  |  |      *  | 
790  |  |      * <pre>  | 
791  |  |      * int y = cal->fieldDifference(when, Calendar::YEAR, err);  | 
792  |  |      * int m = cal->fieldDifference(when, Calendar::MONTH, err);  | 
793  |  |      * int d = cal->fieldDifference(when, Calendar::DATE, err);</pre>  | 
794  |  |      *  | 
795  |  |      * computes the difference between <code>cal</code> and  | 
796  |  |      * <code>when</code> in years, months, and days.  | 
797  |  |      *  | 
798  |  |      * <p>Note: <code>fieldDifference()</code> is  | 
799  |  |      * <em>asymmetrical</em>.  That is, in the following code:  | 
800  |  |      *  | 
801  |  |      * <pre>  | 
802  |  |      * cal->setTime(date1, err);  | 
803  |  |      * int m1 = cal->fieldDifference(date2, Calendar::MONTH, err);  | 
804  |  |      * int d1 = cal->fieldDifference(date2, Calendar::DATE, err);  | 
805  |  |      * cal->setTime(date2, err);  | 
806  |  |      * int m2 = cal->fieldDifference(date1, Calendar::MONTH, err);  | 
807  |  |      * int d2 = cal->fieldDifference(date1, Calendar::DATE, err);</pre>  | 
808  |  |      *  | 
809  |  |      * one might expect that <code>m1 == -m2 && d1 == -d2</code>.  | 
810  |  |      * However, this is not generally the case, because of  | 
811  |  |      * irregularities in the underlying calendar system (e.g., the  | 
812  |  |      * Gregorian calendar has a varying number of days per month).  | 
813  |  |      *  | 
814  |  |      * @param when the date to compare this calendar's time to  | 
815  |  |      * @param field the field in which to compute the result  | 
816  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
817  |  |      *                previously set in the time field is invalid, this will be set to  | 
818  |  |      *                an error status.  | 
819  |  |      * @return the difference, either positive or negative, between  | 
820  |  |      * this calendar's time and <code>when</code>, in terms of  | 
821  |  |      * <code>field</code>.  | 
822  |  |      * @stable ICU 2.6.  | 
823  |  |      */  | 
824  |  |     virtual int32_t fieldDifference(UDate when, UCalendarDateFields field, UErrorCode& status);  | 
825  |  |  | 
826  |  |     /**  | 
827  |  |      * Sets the calendar's time zone to be the one passed in. The Calendar takes ownership  | 
828  |  |      * of the TimeZone; the caller is no longer responsible for deleting it.  If the  | 
829  |  |      * given time zone is NULL, this function has no effect.  | 
830  |  |      *  | 
831  |  |      * @param value  The given time zone.  | 
832  |  |      * @stable ICU 2.0  | 
833  |  |      */  | 
834  |  |     void adoptTimeZone(TimeZone* value);  | 
835  |  |  | 
836  |  |     /**  | 
837  |  |      * Sets the calendar's time zone to be the same as the one passed in. The TimeZone  | 
838  |  |      * passed in is _not_ adopted; the client is still responsible for deleting it.  | 
839  |  |      *  | 
840  |  |      * @param zone  The given time zone.  | 
841  |  |      * @stable ICU 2.0  | 
842  |  |      */  | 
843  |  |     void setTimeZone(const TimeZone& zone);  | 
844  |  |  | 
845  |  |     /**  | 
846  |  |      * Returns a reference to the time zone owned by this calendar. The returned reference  | 
847  |  |      * is only valid until clients make another call to adoptTimeZone or setTimeZone,  | 
848  |  |      * or this Calendar is destroyed.  | 
849  |  |      *  | 
850  |  |      * @return   The time zone object associated with this calendar.  | 
851  |  |      * @stable ICU 2.0  | 
852  |  |      */  | 
853  |  |     const TimeZone& getTimeZone(void) const;  | 
854  |  |  | 
855  |  |     /**  | 
856  |  |      * Returns the time zone owned by this calendar. The caller owns the returned object  | 
857  |  |      * and must delete it when done.  After this call, the new time zone associated  | 
858  |  |      * with this Calendar is the default TimeZone as returned by TimeZone::createDefault().  | 
859  |  |      *  | 
860  |  |      * @return   The time zone object which was associated with this calendar.  | 
861  |  |      * @stable ICU 2.0  | 
862  |  |      */  | 
863  |  |     TimeZone* orphanTimeZone(void);  | 
864  |  |  | 
865  |  |     /**  | 
866  |  |      * Queries if the current date for this Calendar is in Daylight Savings Time.  | 
867  |  |      *  | 
868  |  |      * @param status Fill-in parameter which receives the status of this operation.  | 
869  |  |      * @return   True if the current date for this Calendar is in Daylight Savings Time,  | 
870  |  |      *           false, otherwise.  | 
871  |  |      * @stable ICU 2.0  | 
872  |  |      */  | 
873  |  |     virtual UBool inDaylightTime(UErrorCode& status) const = 0;  | 
874  |  |  | 
875  |  |     /**  | 
876  |  |      * Specifies whether or not date/time interpretation is to be lenient. With lenient  | 
877  |  |      * interpretation, a date such as "February 942, 1996" will be treated as being  | 
878  |  |      * equivalent to the 941st day after February 1, 1996. With strict interpretation,  | 
879  |  |      * such dates will cause an error when computing time from the time field values  | 
880  |  |      * representing the dates.  | 
881  |  |      *  | 
882  |  |      * @param lenient  True specifies date/time interpretation to be lenient.  | 
883  |  |      *  | 
884  |  |      * @see            DateFormat#setLenient  | 
885  |  |      * @stable ICU 2.0  | 
886  |  |      */  | 
887  |  |     void setLenient(UBool lenient);  | 
888  |  |  | 
889  |  |     /**  | 
890  |  |      * Tells whether date/time interpretation is to be lenient.  | 
891  |  |      *  | 
892  |  |      * @return   True tells that date/time interpretation is to be lenient.  | 
893  |  |      * @stable ICU 2.0  | 
894  |  |      */  | 
895  |  |     UBool isLenient(void) const;  | 
896  |  |  | 
897  |  |     /**  | 
898  |  |      * Sets the behavior for handling wall time repeating multiple times  | 
899  |  |      * at negative time zone offset transitions. For example, 1:30 AM on  | 
900  |  |      * November 6, 2011 in US Eastern time (America/New_York) occurs twice;  | 
901  |  |      * 1:30 AM EDT, then 1:30 AM EST one hour later. When <code>UCAL_WALLTIME_FIRST</code>  | 
902  |  |      * is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT  | 
903  |  |      * (first occurrence). When <code>UCAL_WALLTIME_LAST</code> is used, it will be  | 
904  |  |      * interpreted as 1:30 AM EST (last occurrence). The default value is  | 
905  |  |      * <code>UCAL_WALLTIME_LAST</code>.  | 
906  |  |      * <p>  | 
907  |  |      * <b>Note:</b>When <code>UCAL_WALLTIME_NEXT_VALID</code> is not a valid  | 
908  |  |      * option for this. When the argument is neither <code>UCAL_WALLTIME_FIRST</code>  | 
909  |  |      * nor <code>UCAL_WALLTIME_LAST</code>, this method has no effect and will keep  | 
910  |  |      * the current setting.  | 
911  |  |      *  | 
912  |  |      * @param option the behavior for handling repeating wall time, either  | 
913  |  |      * <code>UCAL_WALLTIME_FIRST</code> or <code>UCAL_WALLTIME_LAST</code>.  | 
914  |  |      * @see #getRepeatedWallTimeOption  | 
915  |  |      * @stable ICU 49  | 
916  |  |      */  | 
917  |  |     void setRepeatedWallTimeOption(UCalendarWallTimeOption option);  | 
918  |  |  | 
919  |  |     /**  | 
920  |  |      * Gets the behavior for handling wall time repeating multiple times  | 
921  |  |      * at negative time zone offset transitions.  | 
922  |  |      *  | 
923  |  |      * @return the behavior for handling repeating wall time, either  | 
924  |  |      * <code>UCAL_WALLTIME_FIRST</code> or <code>UCAL_WALLTIME_LAST</code>.  | 
925  |  |      * @see #setRepeatedWallTimeOption  | 
926  |  |      * @stable ICU 49  | 
927  |  |      */  | 
928  |  |     UCalendarWallTimeOption getRepeatedWallTimeOption(void) const;  | 
929  |  |  | 
930  |  |     /**  | 
931  |  |      * Sets the behavior for handling skipped wall time at positive time zone offset  | 
932  |  |      * transitions. For example, 2:30 AM on March 13, 2011 in US Eastern time (America/New_York)  | 
933  |  |      * does not exist because the wall time jump from 1:59 AM EST to 3:00 AM EDT. When  | 
934  |  |      * <code>UCAL_WALLTIME_FIRST</code> is used, 2:30 AM is interpreted as 30 minutes before 3:00 AM  | 
935  |  |      * EDT, therefore, it will be resolved as 1:30 AM EST. When <code>UCAL_WALLTIME_LAST</code>  | 
936  |  |      * is used, 2:30 AM is interpreted as 31 minutes after 1:59 AM EST, therefore, it will be  | 
937  |  |      * resolved as 3:30 AM EDT. When <code>UCAL_WALLTIME_NEXT_VALID</code> is used, 2:30 AM will  | 
938  |  |      * be resolved as next valid wall time, that is 3:00 AM EDT. The default value is  | 
939  |  |      * <code>UCAL_WALLTIME_LAST</code>.  | 
940  |  |      * <p>  | 
941  |  |      * <b>Note:</b>This option is effective only when this calendar is lenient.  | 
942  |  |      * When the calendar is strict, such non-existing wall time will cause an error.  | 
943  |  |      *  | 
944  |  |      * @param option the behavior for handling skipped wall time at positive time zone  | 
945  |  |      * offset transitions, one of <code>UCAL_WALLTIME_FIRST</code>, <code>UCAL_WALLTIME_LAST</code> and  | 
946  |  |      * <code>UCAL_WALLTIME_NEXT_VALID</code>.  | 
947  |  |      * @see #getSkippedWallTimeOption  | 
948  |  |      *  | 
949  |  |      * @stable ICU 49  | 
950  |  |      */  | 
951  |  |     void setSkippedWallTimeOption(UCalendarWallTimeOption option);  | 
952  |  |  | 
953  |  |     /**  | 
954  |  |      * Gets the behavior for handling skipped wall time at positive time zone offset  | 
955  |  |      * transitions.  | 
956  |  |      *  | 
957  |  |      * @return the behavior for handling skipped wall time, one of  | 
958  |  |      * <code>UCAL_WALLTIME_FIRST</code>, <code>UCAL_WALLTIME_LAST</code>  | 
959  |  |      * and <code>UCAL_WALLTIME_NEXT_VALID</code>.  | 
960  |  |      * @see #setSkippedWallTimeOption  | 
961  |  |      * @stable ICU 49  | 
962  |  |      */  | 
963  |  |     UCalendarWallTimeOption getSkippedWallTimeOption(void) const;  | 
964  |  |  | 
965  |  | #ifndef U_HIDE_DEPRECATED_API  | 
966  |  |     /**  | 
967  |  |      * Sets what the first day of the week is; e.g., Sunday in US, Monday in France.  | 
968  |  |      *  | 
969  |  |      * @param value  The given first day of the week.  | 
970  |  |      * @deprecated ICU 2.6. Use setFirstDayOfWeek(UCalendarDaysOfWeek value) instead.  | 
971  |  |      */  | 
972  |  |     void setFirstDayOfWeek(EDaysOfWeek value);  | 
973  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
974  |  |  | 
975  |  |     /**  | 
976  |  |      * Sets what the first day of the week is; e.g., Sunday in US, Monday in France.  | 
977  |  |      *  | 
978  |  |      * @param value  The given first day of the week.  | 
979  |  |      * @stable ICU 2.6.  | 
980  |  |      */  | 
981  |  |     void setFirstDayOfWeek(UCalendarDaysOfWeek value);  | 
982  |  |  | 
983  |  | #ifndef U_HIDE_DEPRECATED_API  | 
984  |  |     /**  | 
985  |  |      * Gets what the first day of the week is; e.g., Sunday in US, Monday in France.  | 
986  |  |      *  | 
987  |  |      * @return   The first day of the week.  | 
988  |  |      * @deprecated ICU 2.6 use the overload with error code  | 
989  |  |      */  | 
990  |  |     EDaysOfWeek getFirstDayOfWeek(void) const;  | 
991  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
992  |  |  | 
993  |  |     /**  | 
994  |  |      * Gets what the first day of the week is; e.g., Sunday in US, Monday in France.  | 
995  |  |      *  | 
996  |  |      * @param status error code  | 
997  |  |      * @return   The first day of the week.  | 
998  |  |      * @stable ICU 2.6  | 
999  |  |      */  | 
1000  |  |     UCalendarDaysOfWeek getFirstDayOfWeek(UErrorCode &status) const;  | 
1001  |  |  | 
1002  |  |     /**  | 
1003  |  |      * Sets what the minimal days required in the first week of the year are; For  | 
1004  |  |      * example, if the first week is defined as one that contains the first day of the  | 
1005  |  |      * first month of a year, call the method with value 1. If it must be a full week,  | 
1006  |  |      * use value 7.  | 
1007  |  |      *  | 
1008  |  |      * @param value  The given minimal days required in the first week of the year.  | 
1009  |  |      * @stable ICU 2.0  | 
1010  |  |      */  | 
1011  |  |     void setMinimalDaysInFirstWeek(uint8_t value);  | 
1012  |  |  | 
1013  |  |     /**  | 
1014  |  |      * Gets what the minimal days required in the first week of the year are; e.g., if  | 
1015  |  |      * the first week is defined as one that contains the first day of the first month  | 
1016  |  |      * of a year, getMinimalDaysInFirstWeek returns 1. If the minimal days required must  | 
1017  |  |      * be a full week, getMinimalDaysInFirstWeek returns 7.  | 
1018  |  |      *  | 
1019  |  |      * @return   The minimal days required in the first week of the year.  | 
1020  |  |      * @stable ICU 2.0  | 
1021  |  |      */  | 
1022  |  |     uint8_t getMinimalDaysInFirstWeek(void) const;  | 
1023  |  |  | 
1024  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
1025  |  |     /**  | 
1026  |  |      * Gets the minimum value for the given time field. e.g., for Gregorian  | 
1027  |  |      * DAY_OF_MONTH, 1.  | 
1028  |  |      *  | 
1029  |  |      * @param field  The given time field.  | 
1030  |  |      * @return       The minimum value for the given time field.  | 
1031  |  |      * @deprecated ICU 2.6. Use getMinimum(UCalendarDateFields field) instead.  | 
1032  |  |      */  | 
1033  |  |     virtual int32_t getMinimum(EDateFields field) const;  | 
1034  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
1035  |  |  | 
1036  |  |     /**  | 
1037  |  |      * Gets the minimum value for the given time field. e.g., for Gregorian  | 
1038  |  |      * DAY_OF_MONTH, 1.  | 
1039  |  |      *  | 
1040  |  |      * @param field  The given time field.  | 
1041  |  |      * @return       The minimum value for the given time field.  | 
1042  |  |      * @stable ICU 2.6.  | 
1043  |  |      */  | 
1044  |  |     virtual int32_t getMinimum(UCalendarDateFields field) const;  | 
1045  |  |  | 
1046  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
1047  |  |     /**  | 
1048  |  |      * Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,  | 
1049  |  |      * 31.  | 
1050  |  |      *  | 
1051  |  |      * @param field  The given time field.  | 
1052  |  |      * @return       The maximum value for the given time field.  | 
1053  |  |      * @deprecated ICU 2.6. Use getMaximum(UCalendarDateFields field) instead.  | 
1054  |  |      */  | 
1055  |  |     virtual int32_t getMaximum(EDateFields field) const;  | 
1056  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
1057  |  |  | 
1058  |  |     /**  | 
1059  |  |      * Gets the maximum value for the given time field. e.g. for Gregorian DAY_OF_MONTH,  | 
1060  |  |      * 31.  | 
1061  |  |      *  | 
1062  |  |      * @param field  The given time field.  | 
1063  |  |      * @return       The maximum value for the given time field.  | 
1064  |  |      * @stable ICU 2.6.  | 
1065  |  |      */  | 
1066  |  |     virtual int32_t getMaximum(UCalendarDateFields field) const;  | 
1067  |  |  | 
1068  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
1069  |  |     /**  | 
1070  |  |      * Gets the highest minimum value for the given field if varies. Otherwise same as  | 
1071  |  |      * getMinimum(). For Gregorian, no difference.  | 
1072  |  |      *  | 
1073  |  |      * @param field  The given time field.  | 
1074  |  |      * @return       The highest minimum value for the given time field.  | 
1075  |  |      * @deprecated ICU 2.6. Use getGreatestMinimum(UCalendarDateFields field) instead.  | 
1076  |  |      */  | 
1077  |  |     virtual int32_t getGreatestMinimum(EDateFields field) const;  | 
1078  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
1079  |  |  | 
1080  |  |     /**  | 
1081  |  |      * Gets the highest minimum value for the given field if varies. Otherwise same as  | 
1082  |  |      * getMinimum(). For Gregorian, no difference.  | 
1083  |  |      *  | 
1084  |  |      * @param field  The given time field.  | 
1085  |  |      * @return       The highest minimum value for the given time field.  | 
1086  |  |      * @stable ICU 2.6.  | 
1087  |  |      */  | 
1088  |  |     virtual int32_t getGreatestMinimum(UCalendarDateFields field) const;  | 
1089  |  |  | 
1090  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
1091  |  |     /**  | 
1092  |  |      * Gets the lowest maximum value for the given field if varies. Otherwise same as  | 
1093  |  |      * getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.  | 
1094  |  |      *  | 
1095  |  |      * @param field  The given time field.  | 
1096  |  |      * @return       The lowest maximum value for the given time field.  | 
1097  |  |      * @deprecated ICU 2.6. Use getLeastMaximum(UCalendarDateFields field) instead.  | 
1098  |  |      */  | 
1099  |  |     virtual int32_t getLeastMaximum(EDateFields field) const;  | 
1100  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
1101  |  |  | 
1102  |  |     /**  | 
1103  |  |      * Gets the lowest maximum value for the given field if varies. Otherwise same as  | 
1104  |  |      * getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.  | 
1105  |  |      *  | 
1106  |  |      * @param field  The given time field.  | 
1107  |  |      * @return       The lowest maximum value for the given time field.  | 
1108  |  |      * @stable ICU 2.6.  | 
1109  |  |      */  | 
1110  |  |     virtual int32_t getLeastMaximum(UCalendarDateFields field) const;  | 
1111  |  |  | 
1112  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1113  |  |     /**  | 
1114  |  |      * Return the minimum value that this field could have, given the current date.  | 
1115  |  |      * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().  | 
1116  |  |      *  | 
1117  |  |      * The version of this function on Calendar uses an iterative algorithm to determine the  | 
1118  |  |      * actual minimum value for the field.  There is almost always a more efficient way to  | 
1119  |  |      * accomplish this (in most cases, you can simply return getMinimum()).  GregorianCalendar  | 
1120  |  |      * overrides this function with a more efficient implementation.  | 
1121  |  |      *  | 
1122  |  |      * @param field    the field to determine the minimum of  | 
1123  |  |      * @param status   Fill-in parameter which receives the status of this operation.  | 
1124  |  |      * @return         the minimum of the given field for the current date of this Calendar  | 
1125  |  |      * @deprecated ICU 2.6. Use getActualMinimum(UCalendarDateFields field, UErrorCode& status) instead.  | 
1126  |  |      */  | 
1127  |  |     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;  | 
1128  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1129  |  |  | 
1130  |  |     /**  | 
1131  |  |      * Return the minimum value that this field could have, given the current date.  | 
1132  |  |      * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().  | 
1133  |  |      *  | 
1134  |  |      * The version of this function on Calendar uses an iterative algorithm to determine the  | 
1135  |  |      * actual minimum value for the field.  There is almost always a more efficient way to  | 
1136  |  |      * accomplish this (in most cases, you can simply return getMinimum()).  GregorianCalendar  | 
1137  |  |      * overrides this function with a more efficient implementation.  | 
1138  |  |      *  | 
1139  |  |      * @param field    the field to determine the minimum of  | 
1140  |  |      * @param status   Fill-in parameter which receives the status of this operation.  | 
1141  |  |      * @return         the minimum of the given field for the current date of this Calendar  | 
1142  |  |      * @stable ICU 2.6.  | 
1143  |  |      */  | 
1144  |  |     virtual int32_t getActualMinimum(UCalendarDateFields field, UErrorCode& status) const;  | 
1145  |  |  | 
1146  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1147  |  |     /**  | 
1148  |  |      * Return the maximum value that this field could have, given the current date.  | 
1149  |  |      * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual  | 
1150  |  |      * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,  | 
1151  |  |      * for some years the actual maximum for MONTH is 12, and for others 13.  | 
1152  |  |      *  | 
1153  |  |      * The version of this function on Calendar uses an iterative algorithm to determine the  | 
1154  |  |      * actual maximum value for the field.  There is almost always a more efficient way to  | 
1155  |  |      * accomplish this (in most cases, you can simply return getMaximum()).  GregorianCalendar  | 
1156  |  |      * overrides this function with a more efficient implementation.  | 
1157  |  |      *  | 
1158  |  |      * @param field    the field to determine the maximum of  | 
1159  |  |      * @param status   Fill-in parameter which receives the status of this operation.  | 
1160  |  |      * @return         the maximum of the given field for the current date of this Calendar  | 
1161  |  |      * @deprecated ICU 2.6. Use getActualMaximum(UCalendarDateFields field, UErrorCode& status) instead.  | 
1162  |  |      */  | 
1163  |  |     int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;  | 
1164  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1165  |  |  | 
1166  |  |     /**  | 
1167  |  |      * Return the maximum value that this field could have, given the current date.  | 
1168  |  |      * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual  | 
1169  |  |      * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,  | 
1170  |  |      * for some years the actual maximum for MONTH is 12, and for others 13.  | 
1171  |  |      *  | 
1172  |  |      * The version of this function on Calendar uses an iterative algorithm to determine the  | 
1173  |  |      * actual maximum value for the field.  There is almost always a more efficient way to  | 
1174  |  |      * accomplish this (in most cases, you can simply return getMaximum()).  GregorianCalendar  | 
1175  |  |      * overrides this function with a more efficient implementation.  | 
1176  |  |      *  | 
1177  |  |      * @param field    the field to determine the maximum of  | 
1178  |  |      * @param status   Fill-in parameter which receives the status of this operation.  | 
1179  |  |      * @return         the maximum of the given field for the current date of this Calendar  | 
1180  |  |      * @stable ICU 2.6.  | 
1181  |  |      */  | 
1182  |  |     virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;  | 
1183  |  |  | 
1184  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1185  |  |     /**  | 
1186  |  |      * Gets the value for a given time field. Recalculate the current time field values  | 
1187  |  |      * if the time value has been changed by a call to setTime(). Return zero for unset  | 
1188  |  |      * fields if any fields have been explicitly set by a call to set(). To force a  | 
1189  |  |      * recomputation of all fields regardless of the previous state, call complete().  | 
1190  |  |      * This method is semantically const, but may alter the object in memory.  | 
1191  |  |      *  | 
1192  |  |      * @param field  The given time field.  | 
1193  |  |      * @param status Fill-in parameter which receives the status of the operation.  | 
1194  |  |      * @return       The value for the given time field, or zero if the field is unset,  | 
1195  |  |      *               and set() has been called for any other field.  | 
1196  |  |      * @deprecated ICU 2.6. Use get(UCalendarDateFields field, UErrorCode& status) instead.  | 
1197  |  |      */  | 
1198  |  |     int32_t get(EDateFields field, UErrorCode& status) const;  | 
1199  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1200  |  |  | 
1201  |  |     /**  | 
1202  |  |      * Gets the value for a given time field. Recalculate the current time field values  | 
1203  |  |      * if the time value has been changed by a call to setTime(). Return zero for unset  | 
1204  |  |      * fields if any fields have been explicitly set by a call to set(). To force a  | 
1205  |  |      * recomputation of all fields regardless of the previous state, call complete().  | 
1206  |  |      * This method is semantically const, but may alter the object in memory.  | 
1207  |  |      *  | 
1208  |  |      * @param field  The given time field.  | 
1209  |  |      * @param status Fill-in parameter which receives the status of the operation.  | 
1210  |  |      * @return       The value for the given time field, or zero if the field is unset,  | 
1211  |  |      *               and set() has been called for any other field.  | 
1212  |  |      * @stable ICU 2.6.  | 
1213  |  |      */  | 
1214  |  |     int32_t get(UCalendarDateFields field, UErrorCode& status) const;  | 
1215  |  |  | 
1216  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1217  |  |     /**  | 
1218  |  |      * Determines if the given time field has a value set. This can affect in the  | 
1219  |  |      * resolving of time in Calendar. Unset fields have a value of zero, by definition.  | 
1220  |  |      *  | 
1221  |  |      * @param field  The given time field.  | 
1222  |  |      * @return   True if the given time field has a value set; false otherwise.  | 
1223  |  |      * @deprecated ICU 2.6. Use isSet(UCalendarDateFields field) instead.  | 
1224  |  |      */  | 
1225  |  |     UBool isSet(EDateFields field) const;  | 
1226  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1227  |  |  | 
1228  |  |     /**  | 
1229  |  |      * Determines if the given time field has a value set. This can affect in the  | 
1230  |  |      * resolving of time in Calendar. Unset fields have a value of zero, by definition.  | 
1231  |  |      *  | 
1232  |  |      * @param field  The given time field.  | 
1233  |  |      * @return   True if the given time field has a value set; false otherwise.  | 
1234  |  |      * @stable ICU 2.6.  | 
1235  |  |      */  | 
1236  |  |     UBool isSet(UCalendarDateFields field) const;  | 
1237  |  |  | 
1238  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1239  |  |     /**  | 
1240  |  |      * Sets the given time field with the given value.  | 
1241  |  |      *  | 
1242  |  |      * @param field  The given time field.  | 
1243  |  |      * @param value  The value to be set for the given time field.  | 
1244  |  |      * @deprecated ICU 2.6. Use set(UCalendarDateFields field, int32_t value) instead.  | 
1245  |  |      */  | 
1246  |  |     void set(EDateFields field, int32_t value);  | 
1247  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1248  |  |  | 
1249  |  |     /**  | 
1250  |  |      * Sets the given time field with the given value.  | 
1251  |  |      *  | 
1252  |  |      * @param field  The given time field.  | 
1253  |  |      * @param value  The value to be set for the given time field.  | 
1254  |  |      * @stable ICU 2.6.  | 
1255  |  |      */  | 
1256  |  |     void set(UCalendarDateFields field, int32_t value);  | 
1257  |  |  | 
1258  |  |     /**  | 
1259  |  |      * Sets the values for the fields YEAR, MONTH, and DATE. Other field values are  | 
1260  |  |      * retained; call clear() first if this is not desired.  | 
1261  |  |      *  | 
1262  |  |      * @param year   The value used to set the YEAR time field.  | 
1263  |  |      * @param month  The value used to set the MONTH time field. Month value is 0-based.  | 
1264  |  |      *               e.g., 0 for January.  | 
1265  |  |      * @param date   The value used to set the DATE time field.  | 
1266  |  |      * @stable ICU 2.0  | 
1267  |  |      */  | 
1268  |  |     void set(int32_t year, int32_t month, int32_t date);  | 
1269  |  |  | 
1270  |  |     /**  | 
1271  |  |      * Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, and MINUTE. Other  | 
1272  |  |      * field values are retained; call clear() first if this is not desired.  | 
1273  |  |      *  | 
1274  |  |      * @param year    The value used to set the YEAR time field.  | 
1275  |  |      * @param month   The value used to set the MONTH time field. Month value is  | 
1276  |  |      *                0-based. E.g., 0 for January.  | 
1277  |  |      * @param date    The value used to set the DATE time field.  | 
1278  |  |      * @param hour    The value used to set the HOUR_OF_DAY time field.  | 
1279  |  |      * @param minute  The value used to set the MINUTE time field.  | 
1280  |  |      * @stable ICU 2.0  | 
1281  |  |      */  | 
1282  |  |     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);  | 
1283  |  |  | 
1284  |  |     /**  | 
1285  |  |      * Sets the values for the fields YEAR, MONTH, DATE, HOUR_OF_DAY, MINUTE, and SECOND.  | 
1286  |  |      * Other field values are retained; call clear() first if this is not desired.  | 
1287  |  |      *  | 
1288  |  |      * @param year    The value used to set the YEAR time field.  | 
1289  |  |      * @param month   The value used to set the MONTH time field. Month value is  | 
1290  |  |      *                0-based. E.g., 0 for January.  | 
1291  |  |      * @param date    The value used to set the DATE time field.  | 
1292  |  |      * @param hour    The value used to set the HOUR_OF_DAY time field.  | 
1293  |  |      * @param minute  The value used to set the MINUTE time field.  | 
1294  |  |      * @param second  The value used to set the SECOND time field.  | 
1295  |  |      * @stable ICU 2.0  | 
1296  |  |      */  | 
1297  |  |     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);  | 
1298  |  |  | 
1299  |  |     /**  | 
1300  |  |      * Clears the values of all the time fields, making them both unset and assigning  | 
1301  |  |      * them a value of zero. The field values will be determined during the next  | 
1302  |  |      * resolving of time into time fields.  | 
1303  |  |      * @stable ICU 2.0  | 
1304  |  |      */  | 
1305  |  |     void clear(void);  | 
1306  |  |  | 
1307  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1308  |  |     /**  | 
1309  |  |      * Clears the value in the given time field, both making it unset and assigning it a  | 
1310  |  |      * value of zero. This field value will be determined during the next resolving of  | 
1311  |  |      * time into time fields.  | 
1312  |  |      *  | 
1313  |  |      * @param field  The time field to be cleared.  | 
1314  |  |      * @deprecated ICU 2.6. Use clear(UCalendarDateFields field) instead.  | 
1315  |  |      */  | 
1316  |  |     void clear(EDateFields field);  | 
1317  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1318  |  |  | 
1319  |  |     /**  | 
1320  |  |      * Clears the value in the given time field, both making it unset and assigning it a  | 
1321  |  |      * value of zero. This field value will be determined during the next resolving of  | 
1322  |  |      * time into time fields.  | 
1323  |  |      *  | 
1324  |  |      * @param field  The time field to be cleared.  | 
1325  |  |      * @stable ICU 2.6.  | 
1326  |  |      */  | 
1327  |  |     void clear(UCalendarDateFields field);  | 
1328  |  |  | 
1329  |  |     /**  | 
1330  |  |      * Returns a unique class ID POLYMORPHICALLY. Pure virtual method. This method is to  | 
1331  |  |      * implement a simple version of RTTI, since not all C++ compilers support genuine  | 
1332  |  |      * RTTI. Polymorphic operator==() and clone() methods call this method.  | 
1333  |  |      * <P>  | 
1334  |  |      * Concrete subclasses of Calendar must implement getDynamicClassID() and also a  | 
1335  |  |      * static method and data member:  | 
1336  |  |      *  | 
1337  |  |      *      static UClassID getStaticClassID() { return (UClassID)&fgClassID; } | 
1338  |  |      *      static char fgClassID;  | 
1339  |  |      *  | 
1340  |  |      * @return   The class ID for this object. All objects of a given class have the  | 
1341  |  |      *           same class ID. Objects of other classes have different class IDs.  | 
1342  |  |      * @stable ICU 2.0  | 
1343  |  |      */  | 
1344  |  |     virtual UClassID getDynamicClassID(void) const = 0;  | 
1345  |  |  | 
1346  |  |     /**  | 
1347  |  |      * Returns the calendar type name string for this Calendar object.  | 
1348  |  |      * The returned string is the legacy ICU calendar attribute value,  | 
1349  |  |      * for example, "gregorian" or "japanese".  | 
1350  |  |      *  | 
1351  |  |      * See type="old type name" for the calendar attribute of locale IDs  | 
1352  |  |      * at http://www.unicode.org/reports/tr35/#Key_Type_Definitions  | 
1353  |  |      *  | 
1354  |  |      * Sample code for getting the LDML/BCP 47 calendar key value:  | 
1355  |  |      * \code  | 
1356  |  |      * const char *calType = cal->getType();  | 
1357  |  |      * if (0 == strcmp(calType, "unknown")) { | 
1358  |  |      *     // deal with unknown calendar type  | 
1359  |  |      * } else { | 
1360  |  |      *     string localeID("root@calendar="); | 
1361  |  |      *     localeID.append(calType);  | 
1362  |  |      *     char langTag[100];  | 
1363  |  |      *     UErrorCode errorCode = U_ZERO_ERROR;  | 
1364  |  |      *     int32_t length = uloc_toLanguageTag(localeID.c_str(), langTag, (int32_t)sizeof(langTag), true, &errorCode);  | 
1365  |  |      *     if (U_FAILURE(errorCode)) { | 
1366  |  |      *         // deal with errors & overflow  | 
1367  |  |      *     }  | 
1368  |  |      *     string lang(langTag, length);  | 
1369  |  |      *     size_t caPos = lang.find("-ca-"); | 
1370  |  |      *     lang.erase(0, caPos + 4);  | 
1371  |  |      *     // lang now contains the LDML calendar type  | 
1372  |  |      * }  | 
1373  |  |      * \endcode  | 
1374  |  |      *  | 
1375  |  |      * @return legacy calendar type name string  | 
1376  |  |      * @stable ICU 49  | 
1377  |  |      */  | 
1378  |  |     virtual const char * getType() const = 0;  | 
1379  |  |  | 
1380  |  |     /**  | 
1381  |  |      * Returns whether the given day of the week is a weekday, a weekend day,  | 
1382  |  |      * or a day that transitions from one to the other, for the locale and  | 
1383  |  |      * calendar system associated with this Calendar (the locale's region is  | 
1384  |  |      * often the most determinant factor). If a transition occurs at midnight,  | 
1385  |  |      * then the days before and after the transition will have the  | 
1386  |  |      * type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time  | 
1387  |  |      * other than midnight, then the day of the transition will have  | 
1388  |  |      * the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the  | 
1389  |  |      * method getWeekendTransition() will return the point of  | 
1390  |  |      * transition.  | 
1391  |  |      * @param dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY).  | 
1392  |  |      * @param status The error code for the operation.  | 
1393  |  |      * @return The UCalendarWeekdayType for the day of the week.  | 
1394  |  |      * @stable ICU 4.4  | 
1395  |  |      */  | 
1396  |  |     virtual UCalendarWeekdayType getDayOfWeekType(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const;  | 
1397  |  |  | 
1398  |  |     /**  | 
1399  |  |      * Returns the time during the day at which the weekend begins or ends in  | 
1400  |  |      * this calendar system.  If getDayOfWeekType() returns UCAL_WEEKEND_ONSET  | 
1401  |  |      * for the specified dayOfWeek, return the time at which the weekend begins.  | 
1402  |  |      * If getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek,  | 
1403  |  |      * return the time at which the weekend ends. If getDayOfWeekType() returns  | 
1404  |  |      * some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition  | 
1405  |  |      * (U_ILLEGAL_ARGUMENT_ERROR).  | 
1406  |  |      * @param dayOfWeek The day of the week for which the weekend transition time is  | 
1407  |  |      * desired (UCAL_SUNDAY..UCAL_SATURDAY).  | 
1408  |  |      * @param status The error code for the operation.  | 
1409  |  |      * @return The milliseconds after midnight at which the weekend begins or ends.  | 
1410  |  |      * @stable ICU 4.4  | 
1411  |  |      */  | 
1412  |  |     virtual int32_t getWeekendTransition(UCalendarDaysOfWeek dayOfWeek, UErrorCode &status) const;  | 
1413  |  |  | 
1414  |  |     /**  | 
1415  |  |      * Returns true if the given UDate is in the weekend in  | 
1416  |  |      * this calendar system.  | 
1417  |  |      * @param date The UDate in question.  | 
1418  |  |      * @param status The error code for the operation.  | 
1419  |  |      * @return true if the given UDate is in the weekend in  | 
1420  |  |      * this calendar system, false otherwise.  | 
1421  |  |      * @stable ICU 4.4  | 
1422  |  |      */  | 
1423  |  |     virtual UBool isWeekend(UDate date, UErrorCode &status) const;  | 
1424  |  |  | 
1425  |  |     /**  | 
1426  |  |      * Returns true if this Calendar's current date-time is in the weekend in  | 
1427  |  |      * this calendar system.  | 
1428  |  |      * @return true if this Calendar's current date-time is in the weekend in  | 
1429  |  |      * this calendar system, false otherwise.  | 
1430  |  |      * @stable ICU 4.4  | 
1431  |  |      */  | 
1432  |  |     virtual UBool isWeekend(void) const;  | 
1433  |  |  | 
1434  |  | protected:  | 
1435  |  |  | 
1436  |  |      /**  | 
1437  |  |       * Constructs a Calendar with the default time zone as returned by  | 
1438  |  |       * TimeZone::createInstance(), and the default locale.  | 
1439  |  |       *  | 
1440  |  |       * @param success  Indicates the status of Calendar object construction. Returns  | 
1441  |  |       *                 U_ZERO_ERROR if constructed successfully.  | 
1442  |  |      * @stable ICU 2.0  | 
1443  |  |       */  | 
1444  |  |     Calendar(UErrorCode& success);  | 
1445  |  |  | 
1446  |  |     /**  | 
1447  |  |      * Copy constructor  | 
1448  |  |      *  | 
1449  |  |      * @param source    Calendar object to be copied from  | 
1450  |  |      * @stable ICU 2.0  | 
1451  |  |      */  | 
1452  |  |     Calendar(const Calendar& source);  | 
1453  |  |  | 
1454  |  |     /**  | 
1455  |  |      * Default assignment operator  | 
1456  |  |      *  | 
1457  |  |      * @param right    Calendar object to be copied  | 
1458  |  |      * @stable ICU 2.0  | 
1459  |  |      */  | 
1460  |  |     Calendar& operator=(const Calendar& right);  | 
1461  |  |  | 
1462  |  |     /**  | 
1463  |  |      * Constructs a Calendar with the given time zone and locale. Clients are no longer  | 
1464  |  |      * responsible for deleting the given time zone object after it's adopted.  | 
1465  |  |      *  | 
1466  |  |      * @param zone     The given time zone.  | 
1467  |  |      * @param aLocale  The given locale.  | 
1468  |  |      * @param success  Indicates the status of Calendar object construction. Returns  | 
1469  |  |      *                 U_ZERO_ERROR if constructed successfully.  | 
1470  |  |      * @stable ICU 2.0  | 
1471  |  |      */  | 
1472  |  |     Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);  | 
1473  |  |  | 
1474  |  |     /**  | 
1475  |  |      * Constructs a Calendar with the given time zone and locale.  | 
1476  |  |      *  | 
1477  |  |      * @param zone     The given time zone.  | 
1478  |  |      * @param aLocale  The given locale.  | 
1479  |  |      * @param success  Indicates the status of Calendar object construction. Returns  | 
1480  |  |      *                 U_ZERO_ERROR if constructed successfully.  | 
1481  |  |      * @stable ICU 2.0  | 
1482  |  |      */  | 
1483  |  |     Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);  | 
1484  |  |  | 
1485  |  |     /**  | 
1486  |  |      * Converts Calendar's time field values to GMT as milliseconds.  | 
1487  |  |      *  | 
1488  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
1489  |  |      *                previously set in the time field is invalid or restricted by  | 
1490  |  |      *                leniency, this will be set to an error status.  | 
1491  |  |      * @stable ICU 2.0  | 
1492  |  |      */  | 
1493  |  |     virtual void computeTime(UErrorCode& status);  | 
1494  |  |  | 
1495  |  |     /**  | 
1496  |  |      * Converts GMT as milliseconds to time field values. This allows you to sync up the  | 
1497  |  |      * time field values with a new time that is set for the calendar.  This method  | 
1498  |  |      * does NOT recompute the time first; to recompute the time, then the fields, use  | 
1499  |  |      * the method complete().  | 
1500  |  |      *  | 
1501  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
1502  |  |      *                previously set in the time field is invalid or restricted by  | 
1503  |  |      *                leniency, this will be set to an error status.  | 
1504  |  |      * @stable ICU 2.0  | 
1505  |  |      */  | 
1506  |  |     virtual void computeFields(UErrorCode& status);  | 
1507  |  |  | 
1508  |  |     /**  | 
1509  |  |      * Gets this Calendar's current time as a long.  | 
1510  |  |      *  | 
1511  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
1512  |  |      *                previously set in the time field is invalid or restricted by  | 
1513  |  |      *                leniency, this will be set to an error status.  | 
1514  |  |      * @return the current time as UTC milliseconds from the epoch.  | 
1515  |  |      * @stable ICU 2.0  | 
1516  |  |      */  | 
1517  |  |     double getTimeInMillis(UErrorCode& status) const;  | 
1518  |  |  | 
1519  |  |     /**  | 
1520  |  |      * Sets this Calendar's current time from the given long value.  | 
1521  |  |      * @param millis  the new time in UTC milliseconds from the epoch.  | 
1522  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
1523  |  |      *                previously set in the time field is invalid or restricted by  | 
1524  |  |      *                leniency, this will be set to an error status.  | 
1525  |  |      * @stable ICU 2.0  | 
1526  |  |      */  | 
1527  |  |     void setTimeInMillis( double millis, UErrorCode& status );  | 
1528  |  |  | 
1529  |  |     /**  | 
1530  |  |      * Recomputes the current time from currently set fields, and then fills in any  | 
1531  |  |      * unset fields in the time field list.  | 
1532  |  |      *  | 
1533  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
1534  |  |      *                previously set in the time field is invalid or restricted by  | 
1535  |  |      *                leniency, this will be set to an error status.  | 
1536  |  |      * @stable ICU 2.0  | 
1537  |  |      */  | 
1538  |  |     void complete(UErrorCode& status);  | 
1539  |  |  | 
1540  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1541  |  |     /**  | 
1542  |  |      * Gets the value for a given time field. Subclasses can use this function to get  | 
1543  |  |      * field values without forcing recomputation of time.  | 
1544  |  |      *  | 
1545  |  |      * @param field  The given time field.  | 
1546  |  |      * @return       The value for the given time field.  | 
1547  |  |      * @deprecated ICU 2.6. Use internalGet(UCalendarDateFields field) instead.  | 
1548  |  |      */  | 
1549  | 0  |     inline int32_t internalGet(EDateFields field) const {return fFields[field];} | 
1550  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1551  |  |  | 
1552  |  | #ifndef U_HIDE_INTERNAL_API  | 
1553  |  |     /**  | 
1554  |  |      * Gets the value for a given time field. Subclasses can use this function to get  | 
1555  |  |      * field values without forcing recomputation of time. If the field's stamp is UNSET,  | 
1556  |  |      * the defaultValue is used.  | 
1557  |  |      *  | 
1558  |  |      * @param field  The given time field.  | 
1559  |  |      * @param defaultValue a default value used if the field is unset.  | 
1560  |  |      * @return       The value for the given time field.  | 
1561  |  |      * @internal  | 
1562  |  |      */  | 
1563  | 0  |     inline int32_t internalGet(UCalendarDateFields field, int32_t defaultValue) const {return fStamp[field]>kUnset ? fFields[field] : defaultValue;} | 
1564  |  |  | 
1565  |  |     /**  | 
1566  |  |      * Gets the value for a given time field. Subclasses can use this function to get  | 
1567  |  |      * field values without forcing recomputation of time.  | 
1568  |  |      *  | 
1569  |  |      * @param field  The given time field.  | 
1570  |  |      * @return       The value for the given time field.  | 
1571  |  |      * @internal  | 
1572  |  |      */  | 
1573  | 0  |     inline int32_t internalGet(UCalendarDateFields field) const {return fFields[field];} | 
1574  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
1575  |  |  | 
1576  |  | #ifndef U_HIDE_DEPRECATED_API  | 
1577  |  |     /**  | 
1578  |  |      * Sets the value for a given time field.  This is a fast internal method for  | 
1579  |  |      * subclasses.  It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet  | 
1580  |  |      * flags.  | 
1581  |  |      *  | 
1582  |  |      * @param field    The given time field.  | 
1583  |  |      * @param value    The value for the given time field.  | 
1584  |  |      * @deprecated ICU 2.6. Use internalSet(UCalendarDateFields field, int32_t value) instead.  | 
1585  |  |      */  | 
1586  |  |     void internalSet(EDateFields field, int32_t value);  | 
1587  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
1588  |  |  | 
1589  |  |     /**  | 
1590  |  |      * Sets the value for a given time field.  This is a fast internal method for  | 
1591  |  |      * subclasses.  It does not affect the areFieldsInSync, isTimeSet, or areAllFieldsSet  | 
1592  |  |      * flags.  | 
1593  |  |      *  | 
1594  |  |      * @param field    The given time field.  | 
1595  |  |      * @param value    The value for the given time field.  | 
1596  |  |      * @stable ICU 2.6.  | 
1597  |  |      */  | 
1598  |  |     inline void internalSet(UCalendarDateFields field, int32_t value);  | 
1599  |  |  | 
1600  |  |     /**  | 
1601  |  |      * Prepare this calendar for computing the actual minimum or maximum.  | 
1602  |  |      * This method modifies this calendar's fields; it is called on a  | 
1603  |  |      * temporary calendar.  | 
1604  |  |      * @internal  | 
1605  |  |      */  | 
1606  |  |     virtual void prepareGetActual(UCalendarDateFields field, UBool isMinimum, UErrorCode &status);  | 
1607  |  |  | 
1608  |  |     /**  | 
1609  |  |      * Limit enums. Not in sync with UCalendarLimitType (refers to internal fields).  | 
1610  |  |      * @internal  | 
1611  |  |      */  | 
1612  |  |     enum ELimitType { | 
1613  |  | #ifndef U_HIDE_INTERNAL_API  | 
1614  |  |       UCAL_LIMIT_MINIMUM = 0,  | 
1615  |  |       UCAL_LIMIT_GREATEST_MINIMUM,  | 
1616  |  |       UCAL_LIMIT_LEAST_MAXIMUM,  | 
1617  |  |       UCAL_LIMIT_MAXIMUM,  | 
1618  |  |       UCAL_LIMIT_COUNT  | 
1619  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
1620  |  |     };  | 
1621  |  |  | 
1622  |  |     /**  | 
1623  |  |      * Subclass API for defining limits of different types.  | 
1624  |  |      * Subclasses must implement this method to return limits for the  | 
1625  |  |      * following fields:  | 
1626  |  |      *  | 
1627  |  |      * <pre>UCAL_ERA  | 
1628  |  |      * UCAL_YEAR  | 
1629  |  |      * UCAL_MONTH  | 
1630  |  |      * UCAL_WEEK_OF_YEAR  | 
1631  |  |      * UCAL_WEEK_OF_MONTH  | 
1632  |  |      * UCAL_DATE (DAY_OF_MONTH on Java)  | 
1633  |  |      * UCAL_DAY_OF_YEAR  | 
1634  |  |      * UCAL_DAY_OF_WEEK_IN_MONTH  | 
1635  |  |      * UCAL_YEAR_WOY  | 
1636  |  |      * UCAL_EXTENDED_YEAR</pre>  | 
1637  |  |      *  | 
1638  |  |      * @param field one of the above field numbers  | 
1639  |  |      * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,  | 
1640  |  |      * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>  | 
1641  |  |      * @internal  | 
1642  |  |      */  | 
1643  |  |     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const = 0;  | 
1644  |  |  | 
1645  |  |     /**  | 
1646  |  |      * Return a limit for a field.  | 
1647  |  |      * @param field the field, from <code>0..UCAL_MAX_FIELD</code>  | 
1648  |  |      * @param limitType the type specifier for the limit  | 
1649  |  |      * @see #ELimitType  | 
1650  |  |      * @internal  | 
1651  |  |      */  | 
1652  |  |     virtual int32_t getLimit(UCalendarDateFields field, ELimitType limitType) const;  | 
1653  |  |  | 
1654  |  |  | 
1655  |  |     /**  | 
1656  |  |      * Return the Julian day number of day before the first day of the  | 
1657  |  |      * given month in the given extended year.  Subclasses should override  | 
1658  |  |      * this method to implement their calendar system.  | 
1659  |  |      * @param eyear the extended year  | 
1660  |  |      * @param month the zero-based month, or 0 if useMonth is false  | 
1661  |  |      * @param useMonth if false, compute the day before the first day of  | 
1662  |  |      * the given year, otherwise, compute the day before the first day of  | 
1663  |  |      * the given month  | 
1664  |  |      * @return the Julian day number of the day before the first  | 
1665  |  |      * day of the given month and year  | 
1666  |  |      * @internal  | 
1667  |  |      */  | 
1668  |  |     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,  | 
1669  |  |                                                    UBool useMonth) const  = 0;  | 
1670  |  |  | 
1671  |  |     /**  | 
1672  |  |      * Return the number of days in the given month of the given extended  | 
1673  |  |      * year of this calendar system.  Subclasses should override this  | 
1674  |  |      * method if they can provide a more correct or more efficient  | 
1675  |  |      * implementation than the default implementation in Calendar.  | 
1676  |  |      * @internal  | 
1677  |  |      */  | 
1678  |  |     virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const ;  | 
1679  |  |  | 
1680  |  |     /**  | 
1681  |  |      * Return the number of days in the given extended year of this  | 
1682  |  |      * calendar system.  Subclasses should override this method if they can  | 
1683  |  |      * provide a more correct or more efficient implementation than the  | 
1684  |  |      * default implementation in Calendar.  | 
1685  |  |      * @stable ICU 2.0  | 
1686  |  |      */  | 
1687  |  |     virtual int32_t handleGetYearLength(int32_t eyear) const;  | 
1688  |  |  | 
1689  |  |  | 
1690  |  |     /**  | 
1691  |  |      * Return the extended year defined by the current fields.  This will  | 
1692  |  |      * use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such  | 
1693  |  |      * as UCAL_ERA) specific to the calendar system, depending on which set of  | 
1694  |  |      * fields is newer.  | 
1695  |  |      * @return the extended year  | 
1696  |  |      * @internal  | 
1697  |  |      */  | 
1698  |  |     virtual int32_t handleGetExtendedYear() = 0;  | 
1699  |  |  | 
1700  |  |     /**  | 
1701  |  |      * Subclasses may override this.  This method calls  | 
1702  |  |      * handleGetMonthLength() to obtain the calendar-specific month  | 
1703  |  |      * length.  | 
1704  |  |      * @param bestField which field to use to calculate the date  | 
1705  |  |      * @return julian day specified by calendar fields.  | 
1706  |  |      * @internal  | 
1707  |  |      */  | 
1708  |  |     virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField);  | 
1709  |  |  | 
1710  |  |     /**  | 
1711  |  |      * Subclasses must override this to convert from week fields  | 
1712  |  |      * (YEAR_WOY and WEEK_OF_YEAR) to an extended year in the case  | 
1713  |  |      * where YEAR, EXTENDED_YEAR are not set.  | 
1714  |  |      * The Calendar implementation assumes yearWoy is in extended gregorian form  | 
1715  |  |      * @return the extended year, UCAL_EXTENDED_YEAR  | 
1716  |  |      * @internal  | 
1717  |  |      */  | 
1718  |  |     virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);  | 
1719  |  |  | 
1720  |  |     /**  | 
1721  |  |      * Validate a single field of this calendar.  Subclasses should  | 
1722  |  |      * override this method to validate any calendar-specific fields.  | 
1723  |  |      * Generic fields can be handled by `Calendar::validateField()`.  | 
1724  |  |      * @internal  | 
1725  |  |      */  | 
1726  |  |     virtual void validateField(UCalendarDateFields field, UErrorCode &status);  | 
1727  |  |  | 
1728  |  | #ifndef U_HIDE_INTERNAL_API  | 
1729  |  |     /**  | 
1730  |  |      * Compute the Julian day from fields.  Will determine whether to use  | 
1731  |  |      * the JULIAN_DAY field directly, or other fields.  | 
1732  |  |      * @return the julian day  | 
1733  |  |      * @internal  | 
1734  |  |      */  | 
1735  |  |     int32_t computeJulianDay();  | 
1736  |  |  | 
1737  |  |     /**  | 
1738  |  |      * Compute the milliseconds in the day from the fields.  This is a  | 
1739  |  |      * value from 0 to 23:59:59.999 inclusive, unless fields are out of  | 
1740  |  |      * range, in which case it can be an arbitrary value.  This value  | 
1741  |  |      * reflects local zone wall time.  | 
1742  |  |      * @internal  | 
1743  |  |      */  | 
1744  |  |     double computeMillisInDay();  | 
1745  |  |  | 
1746  |  |     /**  | 
1747  |  |      * This method can assume EXTENDED_YEAR has been set.  | 
1748  |  |      * @param millis milliseconds of the date fields  | 
1749  |  |      * @param millisInDay milliseconds of the time fields; may be out  | 
1750  |  |      * or range.  | 
1751  |  |      * @param ec Output param set to failure code on function return  | 
1752  |  |      *          when this function fails.  | 
1753  |  |      * @internal  | 
1754  |  |      */  | 
1755  |  |     int32_t computeZoneOffset(double millis, double millisInDay, UErrorCode &ec);  | 
1756  |  |  | 
1757  |  |  | 
1758  |  |     /**  | 
1759  |  |      * Determine the best stamp in a range.  | 
1760  |  |      * @param start first enum to look at  | 
1761  |  |      * @param end last enum to look at  | 
1762  |  |      * @param bestSoFar stamp prior to function call  | 
1763  |  |      * @return the stamp value of the best stamp  | 
1764  |  |      * @internal  | 
1765  |  |      */  | 
1766  |  |     int32_t newestStamp(UCalendarDateFields start, UCalendarDateFields end, int32_t bestSoFar) const;  | 
1767  |  |  | 
1768  |  |     /**  | 
1769  |  |      * Values for field resolution tables  | 
1770  |  |      * @see #resolveFields  | 
1771  |  |      * @internal  | 
1772  |  |      */  | 
1773  |  |     enum { | 
1774  |  |       /** Marker for end of resolve set (row or group). */  | 
1775  |  |       kResolveSTOP = -1,  | 
1776  |  |       /** Value to be bitwised "ORed" against resolve table field values for remapping.  Example: (UCAL_DATE | kResolveRemap) in 1st column will cause 'UCAL_DATE' to be returned, but will not examine the value of UCAL_DATE.  */  | 
1777  |  |       kResolveRemap = 32  | 
1778  |  |     };  | 
1779  |  |  | 
1780  |  |     /**  | 
1781  |  |      * Precedence table for Dates  | 
1782  |  |      * @see #resolveFields  | 
1783  |  |      * @internal  | 
1784  |  |      */  | 
1785  |  |     static const UFieldResolutionTable kDatePrecedence[];  | 
1786  |  |  | 
1787  |  |     /**  | 
1788  |  |      * Precedence table for Year  | 
1789  |  |      * @see #resolveFields  | 
1790  |  |      * @internal  | 
1791  |  |      */  | 
1792  |  |     static const UFieldResolutionTable kYearPrecedence[];  | 
1793  |  |  | 
1794  |  |     /**  | 
1795  |  |      * Precedence table for Day of Week  | 
1796  |  |      * @see #resolveFields  | 
1797  |  |      * @internal  | 
1798  |  |      */  | 
1799  |  |     static const UFieldResolutionTable kDOWPrecedence[];  | 
1800  |  |  | 
1801  |  |     /**  | 
1802  |  |      * Given a precedence table, return the newest field combination in  | 
1803  |  |      * the table, or UCAL_FIELD_COUNT if none is found.  | 
1804  |  |      *  | 
1805  |  |      * <p>The precedence table is a 3-dimensional array of integers.  It  | 
1806  |  |      * may be thought of as an array of groups.  Each group is an array of  | 
1807  |  |      * lines.  Each line is an array of field numbers.  Within a line, if  | 
1808  |  |      * all fields are set, then the time stamp of the line is taken to be  | 
1809  |  |      * the stamp of the most recently set field.  If any field of a line is  | 
1810  |  |      * unset, then the line fails to match.  Within a group, the line with  | 
1811  |  |      * the newest time stamp is selected.  The first field of the line is  | 
1812  |  |      * returned to indicate which line matched.  | 
1813  |  |      *  | 
1814  |  |      * <p>In some cases, it may be desirable to map a line to field that  | 
1815  |  |      * whose stamp is NOT examined.  For example, if the best field is  | 
1816  |  |      * DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used.  In  | 
1817  |  |      * order to do this, insert the value <code>kResolveRemap | F</code> at  | 
1818  |  |      * the start of the line, where <code>F</code> is the desired return  | 
1819  |  |      * field value.  This field will NOT be examined; it only determines  | 
1820  |  |      * the return value if the other fields in the line are the newest.  | 
1821  |  |      *  | 
1822  |  |      * <p>If all lines of a group contain at least one unset field, then no  | 
1823  |  |      * line will match, and the group as a whole will fail to match.  In  | 
1824  |  |      * that case, the next group will be processed.  If all groups fail to  | 
1825  |  |      * match, then UCAL_FIELD_COUNT is returned.  | 
1826  |  |      * @internal  | 
1827  |  |      */  | 
1828  |  |     UCalendarDateFields resolveFields(const UFieldResolutionTable *precedenceTable);  | 
1829  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
1830  |  |  | 
1831  |  |  | 
1832  |  |     /**  | 
1833  |  |      * @internal  | 
1834  |  |      */  | 
1835  |  |     virtual const UFieldResolutionTable* getFieldResolutionTable() const;  | 
1836  |  |  | 
1837  |  | #ifndef U_HIDE_INTERNAL_API  | 
1838  |  |     /**  | 
1839  |  |      * Return the field that is newer, either defaultField, or  | 
1840  |  |      * alternateField.  If neither is newer or neither is set, return defaultField.  | 
1841  |  |      * @internal  | 
1842  |  |      */  | 
1843  |  |     UCalendarDateFields newerField(UCalendarDateFields defaultField, UCalendarDateFields alternateField) const;  | 
1844  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
1845  |  |  | 
1846  |  |  | 
1847  |  | private:  | 
1848  |  |     /**  | 
1849  |  |      * Helper function for calculating limits by trial and error  | 
1850  |  |      * @param field The field being investigated  | 
1851  |  |      * @param startValue starting (least max) value of field  | 
1852  |  |      * @param endValue ending (greatest max) value of field  | 
1853  |  |      * @param status return type  | 
1854  |  |      * @internal (private)  | 
1855  |  |      */  | 
1856  |  |     int32_t getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t endValue, UErrorCode &status) const;  | 
1857  |  |  | 
1858  |  |  | 
1859  |  | protected:  | 
1860  |  |     /**  | 
1861  |  |      * The flag which indicates if the current time is set in the calendar.  | 
1862  |  |      * @stable ICU 2.0  | 
1863  |  |      */  | 
1864  |  |     UBool      fIsTimeSet;  | 
1865  |  |  | 
1866  |  |     /**  | 
1867  |  |      * True if the fields are in sync with the currently set time of this Calendar.  | 
1868  |  |      * If false, then the next attempt to get the value of a field will  | 
1869  |  |      * force a recomputation of all fields from the current value of the time  | 
1870  |  |      * field.  | 
1871  |  |      * <P>  | 
1872  |  |      * This should really be named areFieldsInSync, but the old name is retained  | 
1873  |  |      * for backward compatibility.  | 
1874  |  |      * @stable ICU 2.0  | 
1875  |  |      */  | 
1876  |  |     UBool      fAreFieldsSet;  | 
1877  |  |  | 
1878  |  |     /**  | 
1879  |  |      * True if all of the fields have been set.  This is initially false, and set to  | 
1880  |  |      * true by computeFields().  | 
1881  |  |      * @stable ICU 2.0  | 
1882  |  |      */  | 
1883  |  |     UBool      fAreAllFieldsSet;  | 
1884  |  |  | 
1885  |  |     /**  | 
1886  |  |      * True if all fields have been virtually set, but have not yet been  | 
1887  |  |      * computed.  This occurs only in setTimeInMillis().  A calendar set  | 
1888  |  |      * to this state will compute all fields from the time if it becomes  | 
1889  |  |      * necessary, but otherwise will delay such computation.  | 
1890  |  |      * @stable ICU 3.0  | 
1891  |  |      */  | 
1892  |  |     UBool fAreFieldsVirtuallySet;  | 
1893  |  |  | 
1894  |  |     /**  | 
1895  |  |      * Get the current time without recomputing.  | 
1896  |  |      *  | 
1897  |  |      * @return     the current time without recomputing.  | 
1898  |  |      * @stable ICU 2.0  | 
1899  |  |      */  | 
1900  | 0  |     UDate        internalGetTime(void) const     { return fTime; } | 
1901  |  |  | 
1902  |  |     /**  | 
1903  |  |      * Set the current time without affecting flags or fields.  | 
1904  |  |      *  | 
1905  |  |      * @param time    The time to be set  | 
1906  |  |      * @return        the current time without recomputing.  | 
1907  |  |      * @stable ICU 2.0  | 
1908  |  |      */  | 
1909  | 0  |     void        internalSetTime(UDate time)     { fTime = time; } | 
1910  |  |  | 
1911  |  |     /**  | 
1912  |  |      * The time fields containing values into which the millis is computed.  | 
1913  |  |      * @stable ICU 2.0  | 
1914  |  |      */  | 
1915  |  |     int32_t     fFields[UCAL_FIELD_COUNT];  | 
1916  |  |  | 
1917  |  | #ifndef U_FORCE_HIDE_DEPRECATED_API  | 
1918  |  |     /**  | 
1919  |  |      * The flags which tell if a specified time field for the calendar is set.  | 
1920  |  |      * @deprecated ICU 2.8 use (fStamp[n]!=kUnset)  | 
1921  |  |      */  | 
1922  |  |     UBool      fIsSet[UCAL_FIELD_COUNT];  | 
1923  |  | #endif  // U_FORCE_HIDE_DEPRECATED_API  | 
1924  |  |  | 
1925  |  |     /** Special values of stamp[]  | 
1926  |  |      * @stable ICU 2.0  | 
1927  |  |      */  | 
1928  |  |     enum { | 
1929  |  |         kUnset                 = 0,  | 
1930  |  |         kInternallySet,  | 
1931  |  |         kMinimumUserStamp  | 
1932  |  |     };  | 
1933  |  |  | 
1934  |  |     /**  | 
1935  |  |      * Pseudo-time-stamps which specify when each field was set. There  | 
1936  |  |      * are two special values, UNSET and INTERNALLY_SET. Values from  | 
1937  |  |      * MINIMUM_USER_SET to Integer.MAX_VALUE are legal user set values.  | 
1938  |  |      * @stable ICU 2.0  | 
1939  |  |      */  | 
1940  |  |     int32_t        fStamp[UCAL_FIELD_COUNT];  | 
1941  |  |  | 
1942  |  |     /**  | 
1943  |  |      * Subclasses may override this method to compute several fields  | 
1944  |  |      * specific to each calendar system.  These are:  | 
1945  |  |      *  | 
1946  |  |      * <ul><li>ERA  | 
1947  |  |      * <li>YEAR  | 
1948  |  |      * <li>MONTH  | 
1949  |  |      * <li>DAY_OF_MONTH  | 
1950  |  |      * <li>DAY_OF_YEAR  | 
1951  |  |      * <li>EXTENDED_YEAR</ul>  | 
1952  |  |      *  | 
1953  |  |      * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which  | 
1954  |  |      * will be set when this method is called.  Subclasses can also call  | 
1955  |  |      * the getGregorianXxx() methods to obtain Gregorian calendar  | 
1956  |  |      * equivalents for the given Julian day.  | 
1957  |  |      *  | 
1958  |  |      * <p>In addition, subclasses should compute any subclass-specific  | 
1959  |  |      * fields, that is, fields from BASE_FIELD_COUNT to  | 
1960  |  |      * getFieldCount() - 1.  | 
1961  |  |      *  | 
1962  |  |      * <p>The default implementation in <code>Calendar</code> implements  | 
1963  |  |      * a pure proleptic Gregorian calendar.  | 
1964  |  |      * @internal  | 
1965  |  |      */  | 
1966  |  |     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);  | 
1967  |  |  | 
1968  |  | #ifndef U_HIDE_INTERNAL_API  | 
1969  |  |     /**  | 
1970  |  |      * Return the extended year on the Gregorian calendar as computed by  | 
1971  |  |      * <code>computeGregorianFields()</code>.  | 
1972  |  |      * @internal  | 
1973  |  |      */  | 
1974  | 0  |     int32_t getGregorianYear() const { | 
1975  | 0  |         return fGregorianYear;  | 
1976  | 0  |     }  | 
1977  |  |  | 
1978  |  |     /**  | 
1979  |  |      * Return the month (0-based) on the Gregorian calendar as computed by  | 
1980  |  |      * <code>computeGregorianFields()</code>.  | 
1981  |  |      * @internal  | 
1982  |  |      */  | 
1983  | 0  |     int32_t getGregorianMonth() const { | 
1984  | 0  |         return fGregorianMonth;  | 
1985  | 0  |     }  | 
1986  |  |  | 
1987  |  |     /**  | 
1988  |  |      * Return the day of year (1-based) on the Gregorian calendar as  | 
1989  |  |      * computed by <code>computeGregorianFields()</code>.  | 
1990  |  |      * @internal  | 
1991  |  |      */  | 
1992  | 0  |     int32_t getGregorianDayOfYear() const { | 
1993  | 0  |         return fGregorianDayOfYear;  | 
1994  | 0  |     }  | 
1995  |  |  | 
1996  |  |     /**  | 
1997  |  |      * Return the day of month (1-based) on the Gregorian calendar as  | 
1998  |  |      * computed by <code>computeGregorianFields()</code>.  | 
1999  |  |      * @internal  | 
2000  |  |      */  | 
2001  | 0  |     int32_t getGregorianDayOfMonth() const { | 
2002  | 0  |       return fGregorianDayOfMonth;  | 
2003  | 0  |     }  | 
2004  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2005  |  |  | 
2006  |  |     /**  | 
2007  |  |      * Called by computeJulianDay.  Returns the default month (0-based) for the year,  | 
2008  |  |      * taking year and era into account.  Defaults to 0 for Gregorian, which doesn't care.  | 
2009  |  |      * @param eyear The extended year  | 
2010  |  |      * @internal  | 
2011  |  |      */  | 
2012  |  |     virtual int32_t getDefaultMonthInYear(int32_t eyear) ;  | 
2013  |  |  | 
2014  |  |  | 
2015  |  |     /**  | 
2016  |  |      * Called by computeJulianDay.  Returns the default day (1-based) for the month,  | 
2017  |  |      * taking currently-set year and era into account.  Defaults to 1 for Gregorian.  | 
2018  |  |      * @param eyear the extended year  | 
2019  |  |      * @param month the month in the year  | 
2020  |  |      * @internal  | 
2021  |  |      */  | 
2022  |  |     virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month);  | 
2023  |  |  | 
2024  |  |     //-------------------------------------------------------------------------  | 
2025  |  |     // Protected utility methods for use by subclasses.  These are very handy  | 
2026  |  |     // for implementing add, roll, and computeFields.  | 
2027  |  |     //-------------------------------------------------------------------------  | 
2028  |  |  | 
2029  |  |     /**  | 
2030  |  |      * Adjust the specified field so that it is within  | 
2031  |  |      * the allowable range for the date to which this calendar is set.  | 
2032  |  |      * For example, in a Gregorian calendar pinning the {@link #UCalendarDateFields DAY_OF_MONTH} | 
2033  |  |      * field for a calendar set to April 31 would cause it to be set  | 
2034  |  |      * to April 30.  | 
2035  |  |      * <p>  | 
2036  |  |      * <b>Subclassing:</b>  | 
2037  |  |      * <br>  | 
2038  |  |      * This utility method is intended for use by subclasses that need to implement  | 
2039  |  |      * their own overrides of {@link #roll roll} and {@link #add add}. | 
2040  |  |      * <p>  | 
2041  |  |      * <b>Note:</b>  | 
2042  |  |      * <code>pinField</code> is implemented in terms of  | 
2043  |  |      * {@link #getActualMinimum getActualMinimum} | 
2044  |  |      * and {@link #getActualMaximum getActualMaximum}.  If either of those methods uses | 
2045  |  |      * a slow, iterative algorithm for a particular field, it would be  | 
2046  |  |      * unwise to attempt to call <code>pinField</code> for that field.  If you  | 
2047  |  |      * really do need to do so, you should override this method to do  | 
2048  |  |      * something more efficient for that field.  | 
2049  |  |      * <p>  | 
2050  |  |      * @param field The calendar field whose value should be pinned.  | 
2051  |  |      * @param status Output param set to failure code on function return  | 
2052  |  |      *          when this function fails.  | 
2053  |  |      *  | 
2054  |  |      * @see #getActualMinimum  | 
2055  |  |      * @see #getActualMaximum  | 
2056  |  |      * @stable ICU 2.0  | 
2057  |  |      */  | 
2058  |  |     virtual void pinField(UCalendarDateFields field, UErrorCode& status);  | 
2059  |  |  | 
2060  |  |     /**  | 
2061  |  |      * Return the week number of a day, within a period. This may be the week number in  | 
2062  |  |      * a year or the week number in a month. Usually this will be a value >= 1, but if  | 
2063  |  |      * some initial days of the period are excluded from week 1, because  | 
2064  |  |      * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1, then | 
2065  |  |      * the week number will be zero for those  | 
2066  |  |      * initial days. This method requires the day number and day of week for some  | 
2067  |  |      * known date in the period in order to determine the day of week  | 
2068  |  |      * on the desired day.  | 
2069  |  |      * <p>  | 
2070  |  |      * <b>Subclassing:</b>  | 
2071  |  |      * <br>  | 
2072  |  |      * This method is intended for use by subclasses in implementing their  | 
2073  |  |      * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods. | 
2074  |  |      * It is often useful in {@link #getActualMinimum getActualMinimum} and | 
2075  |  |      * {@link #getActualMaximum getActualMaximum} as well. | 
2076  |  |      * <p>  | 
2077  |  |      * This variant is handy for computing the week number of some other  | 
2078  |  |      * day of a period (often the first or last day of the period) when its day  | 
2079  |  |      * of the week is not known but the day number and day of week for some other  | 
2080  |  |      * day in the period (e.g. the current date) <em>is</em> known.  | 
2081  |  |      * <p>  | 
2082  |  |      * @param desiredDay    The {@link #UCalendarDateFields DAY_OF_YEAR} or | 
2083  |  |      *              {@link #UCalendarDateFields DAY_OF_MONTH} whose week number is desired. | 
2084  |  |      *              Should be 1 for the first day of the period.  | 
2085  |  |      *  | 
2086  |  |      * @param dayOfPeriod   The {@link #UCalendarDateFields DAY_OF_YEAR} | 
2087  |  |      *              or {@link #UCalendarDateFields DAY_OF_MONTH} for a day in the period whose | 
2088  |  |      *              {@link #UCalendarDateFields DAY_OF_WEEK} is specified by the | 
2089  |  |      *              <code>knownDayOfWeek</code> parameter.  | 
2090  |  |      *              Should be 1 for first day of period.  | 
2091  |  |      *  | 
2092  |  |      * @param dayOfWeek  The {@link #UCalendarDateFields DAY_OF_WEEK} for the day | 
2093  |  |      *              corresponding to the <code>knownDayOfPeriod</code> parameter.  | 
2094  |  |      *              1-based with 1=Sunday.  | 
2095  |  |      *  | 
2096  |  |      * @return      The week number (one-based), or zero if the day falls before  | 
2097  |  |      *              the first week because  | 
2098  |  |      *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} | 
2099  |  |      *              is more than one.  | 
2100  |  |      *  | 
2101  |  |      * @stable ICU 2.8  | 
2102  |  |      */  | 
2103  |  |     int32_t weekNumber(int32_t desiredDay, int32_t dayOfPeriod, int32_t dayOfWeek);  | 
2104  |  |  | 
2105  |  |  | 
2106  |  | #ifndef U_HIDE_INTERNAL_API  | 
2107  |  |     /**  | 
2108  |  |      * Return the week number of a day, within a period. This may be the week number in  | 
2109  |  |      * a year, or the week number in a month. Usually this will be a value >= 1, but if  | 
2110  |  |      * some initial days of the period are excluded from week 1, because  | 
2111  |  |      * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is > 1, | 
2112  |  |      * then the week number will be zero for those  | 
2113  |  |      * initial days. This method requires the day of week for the given date in order to  | 
2114  |  |      * determine the result.  | 
2115  |  |      * <p>  | 
2116  |  |      * <b>Subclassing:</b>  | 
2117  |  |      * <br>  | 
2118  |  |      * This method is intended for use by subclasses in implementing their  | 
2119  |  |      * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods. | 
2120  |  |      * It is often useful in {@link #getActualMinimum getActualMinimum} and | 
2121  |  |      * {@link #getActualMaximum getActualMaximum} as well. | 
2122  |  |      * <p>  | 
2123  |  |      * @param dayOfPeriod   The {@link #UCalendarDateFields DAY_OF_YEAR} or | 
2124  |  |      *                      {@link #UCalendarDateFields DAY_OF_MONTH} whose week number is desired. | 
2125  |  |      *                      Should be 1 for the first day of the period.  | 
2126  |  |      *  | 
2127  |  |      * @param dayOfWeek     The {@link #UCalendarDateFields DAY_OF_WEEK} for the day | 
2128  |  |      *                      corresponding to the <code>dayOfPeriod</code> parameter.  | 
2129  |  |      *                      1-based with 1=Sunday.  | 
2130  |  |      *  | 
2131  |  |      * @return      The week number (one-based), or zero if the day falls before  | 
2132  |  |      *              the first week because  | 
2133  |  |      *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} | 
2134  |  |      *              is more than one.  | 
2135  |  |      * @internal  | 
2136  |  |      */  | 
2137  |  |     inline int32_t weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek);  | 
2138  |  |  | 
2139  |  |     /**  | 
2140  |  |      * returns the local DOW, valid range 0..6  | 
2141  |  |      * @internal  | 
2142  |  |      */  | 
2143  |  |     int32_t getLocalDOW();  | 
2144  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2145  |  |  | 
2146  |  | private:  | 
2147  |  |  | 
2148  |  |     /**  | 
2149  |  |      * The next available value for fStamp[]  | 
2150  |  |      */  | 
2151  |  |     int32_t fNextStamp;// = MINIMUM_USER_STAMP;  | 
2152  |  |  | 
2153  |  |     /**  | 
2154  |  |      * Recalculates the time stamp array (fStamp).  | 
2155  |  |      * Resets fNextStamp to lowest next stamp value.  | 
2156  |  |      */  | 
2157  |  |     void recalculateStamp();  | 
2158  |  |  | 
2159  |  |     /**  | 
2160  |  |      * The current time set for the calendar.  | 
2161  |  |      */  | 
2162  |  |     UDate        fTime;  | 
2163  |  |  | 
2164  |  |     /**  | 
2165  |  |      * @see   #setLenient  | 
2166  |  |      */  | 
2167  |  |     UBool      fLenient;  | 
2168  |  |  | 
2169  |  |     /**  | 
2170  |  |      * Time zone affects the time calculation done by Calendar. Calendar subclasses use  | 
2171  |  |      * the time zone data to produce the local time. Always set; never NULL.  | 
2172  |  |      */  | 
2173  |  |     TimeZone*   fZone;  | 
2174  |  |  | 
2175  |  |     /**  | 
2176  |  |      * Option for repeated wall time  | 
2177  |  |      * @see #setRepeatedWallTimeOption  | 
2178  |  |      */  | 
2179  |  |     UCalendarWallTimeOption fRepeatedWallTime;  | 
2180  |  |  | 
2181  |  |     /**  | 
2182  |  |      * Option for skipped wall time  | 
2183  |  |      * @see #setSkippedWallTimeOption  | 
2184  |  |      */  | 
2185  |  |     UCalendarWallTimeOption fSkippedWallTime;  | 
2186  |  |  | 
2187  |  |     /**  | 
2188  |  |      * Both firstDayOfWeek and minimalDaysInFirstWeek are locale-dependent. They are  | 
2189  |  |      * used to figure out the week count for a specific date for a given locale. These  | 
2190  |  |      * must be set when a Calendar is constructed. For example, in US locale,  | 
2191  |  |      * firstDayOfWeek is SUNDAY; minimalDaysInFirstWeek is 1. They are used to figure  | 
2192  |  |      * out the week count for a specific date for a given locale. These must be set when  | 
2193  |  |      * a Calendar is constructed.  | 
2194  |  |      */  | 
2195  |  |     UCalendarDaysOfWeek fFirstDayOfWeek;  | 
2196  |  |     uint8_t     fMinimalDaysInFirstWeek;  | 
2197  |  |     UCalendarDaysOfWeek fWeekendOnset;  | 
2198  |  |     int32_t fWeekendOnsetMillis;  | 
2199  |  |     UCalendarDaysOfWeek fWeekendCease;  | 
2200  |  |     int32_t fWeekendCeaseMillis;  | 
2201  |  |  | 
2202  |  |     /**  | 
2203  |  |      * Sets firstDayOfWeek and minimalDaysInFirstWeek. Called at Calendar construction  | 
2204  |  |      * time.  | 
2205  |  |      *  | 
2206  |  |      * @param desiredLocale  The given locale.  | 
2207  |  |      * @param type           The calendar type identifier, e.g: gregorian, buddhist, etc.  | 
2208  |  |      * @param success        Indicates the status of setting the week count data from  | 
2209  |  |      *                       the resource for the given locale. Returns U_ZERO_ERROR if  | 
2210  |  |      *                       constructed successfully.  | 
2211  |  |      */  | 
2212  |  |     void        setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& success);  | 
2213  |  |  | 
2214  |  |     /**  | 
2215  |  |      * Recompute the time and update the status fields isTimeSet  | 
2216  |  |      * and areFieldsSet.  Callers should check isTimeSet and only  | 
2217  |  |      * call this method if isTimeSet is false.  | 
2218  |  |      *  | 
2219  |  |      * @param status  Output param set to success/failure code on exit. If any value  | 
2220  |  |      *                previously set in the time field is invalid or restricted by  | 
2221  |  |      *                leniency, this will be set to an error status.  | 
2222  |  |      */  | 
2223  |  |     void updateTime(UErrorCode& status);  | 
2224  |  |  | 
2225  |  |     /**  | 
2226  |  |      * The Gregorian year, as computed by computeGregorianFields() and  | 
2227  |  |      * returned by getGregorianYear().  | 
2228  |  |      * @see #computeGregorianFields  | 
2229  |  |      */  | 
2230  |  |     int32_t fGregorianYear;  | 
2231  |  |  | 
2232  |  |     /**  | 
2233  |  |      * The Gregorian month, as computed by computeGregorianFields() and  | 
2234  |  |      * returned by getGregorianMonth().  | 
2235  |  |      * @see #computeGregorianFields  | 
2236  |  |      */  | 
2237  |  |     int32_t fGregorianMonth;  | 
2238  |  |  | 
2239  |  |     /**  | 
2240  |  |      * The Gregorian day of the year, as computed by  | 
2241  |  |      * computeGregorianFields() and returned by getGregorianDayOfYear().  | 
2242  |  |      * @see #computeGregorianFields  | 
2243  |  |      */  | 
2244  |  |     int32_t fGregorianDayOfYear;  | 
2245  |  |  | 
2246  |  |     /**  | 
2247  |  |      * The Gregorian day of the month, as computed by  | 
2248  |  |      * computeGregorianFields() and returned by getGregorianDayOfMonth().  | 
2249  |  |      * @see #computeGregorianFields  | 
2250  |  |      */  | 
2251  |  |     int32_t fGregorianDayOfMonth;  | 
2252  |  |  | 
2253  |  |     /* calculations */  | 
2254  |  |  | 
2255  |  |     /**  | 
2256  |  |      * Compute the Gregorian calendar year, month, and day of month from  | 
2257  |  |      * the given Julian day.  These values are not stored in fields, but in  | 
2258  |  |      * member variables gregorianXxx.  Also compute the DAY_OF_WEEK and  | 
2259  |  |      * DOW_LOCAL fields.  | 
2260  |  |      */  | 
2261  |  |     void computeGregorianAndDOWFields(int32_t julianDay, UErrorCode &ec);  | 
2262  |  |  | 
2263  |  | protected:  | 
2264  |  |  | 
2265  |  |     /**  | 
2266  |  |      * Compute the Gregorian calendar year, month, and day of month from the  | 
2267  |  |      * Julian day.  These values are not stored in fields, but in member  | 
2268  |  |      * variables gregorianXxx.  They are used for time zone computations and by  | 
2269  |  |      * subclasses that are Gregorian derivatives.  Subclasses may call this  | 
2270  |  |      * method to perform a Gregorian calendar millis->fields computation.  | 
2271  |  |      */  | 
2272  |  |     void computeGregorianFields(int32_t julianDay, UErrorCode &ec);  | 
2273  |  |  | 
2274  |  | private:  | 
2275  |  |  | 
2276  |  |     /**  | 
2277  |  |      * Compute the fields WEEK_OF_YEAR, YEAR_WOY, WEEK_OF_MONTH,  | 
2278  |  |      * DAY_OF_WEEK_IN_MONTH, and DOW_LOCAL from EXTENDED_YEAR, YEAR,  | 
2279  |  |      * DAY_OF_WEEK, and DAY_OF_YEAR.  The latter fields are computed by the  | 
2280  |  |      * subclass based on the calendar system.  | 
2281  |  |      *  | 
2282  |  |      * <p>The YEAR_WOY field is computed simplistically.  It is equal to YEAR  | 
2283  |  |      * most of the time, but at the year boundary it may be adjusted to YEAR-1  | 
2284  |  |      * or YEAR+1 to reflect the overlap of a week into an adjacent year.  In  | 
2285  |  |      * this case, a simple increment or decrement is performed on YEAR, even  | 
2286  |  |      * though this may yield an invalid YEAR value.  For instance, if the YEAR  | 
2287  |  |      * is part of a calendar system with an N-year cycle field CYCLE, then  | 
2288  |  |      * incrementing the YEAR may involve incrementing CYCLE and setting YEAR  | 
2289  |  |      * back to 0 or 1.  This is not handled by this code, and in fact cannot be  | 
2290  |  |      * simply handled without having subclasses define an entire parallel set of  | 
2291  |  |      * fields for fields larger than or equal to a year.  This additional  | 
2292  |  |      * complexity is not warranted, since the intention of the YEAR_WOY field is  | 
2293  |  |      * to support ISO 8601 notation, so it will typically be used with a  | 
2294  |  |      * proleptic Gregorian calendar, which has no field larger than a year.  | 
2295  |  |      */  | 
2296  |  |     void computeWeekFields(UErrorCode &ec);  | 
2297  |  |  | 
2298  |  |  | 
2299  |  |     /**  | 
2300  |  |      * Ensure that each field is within its valid range by calling {@link | 
2301  |  |      * #validateField(int, int&)} on each field that has been set.  This method  | 
2302  |  |      * should only be called if this calendar is not lenient.  | 
2303  |  |      * @see #isLenient  | 
2304  |  |      * @see #validateField(int, int&)  | 
2305  |  |      */  | 
2306  |  |     void validateFields(UErrorCode &status);  | 
2307  |  |  | 
2308  |  |     /**  | 
2309  |  |      * Validate a single field of this calendar given its minimum and  | 
2310  |  |      * maximum allowed value.  If the field is out of range,  | 
2311  |  |      * <code>U_ILLEGAL_ARGUMENT_ERROR</code> will be set.  Subclasses may  | 
2312  |  |      * use this method in their implementation of {@link | 
2313  |  |      * #validateField(int, int&)}.  | 
2314  |  |      */  | 
2315  |  |     void validateField(UCalendarDateFields field, int32_t min, int32_t max, UErrorCode& status);  | 
2316  |  |  | 
2317  |  |  protected:  | 
2318  |  | #ifndef U_HIDE_INTERNAL_API  | 
2319  |  |     /**  | 
2320  |  |      * Convert a quasi Julian date to the day of the week. The Julian date used here is  | 
2321  |  |      * not a true Julian date, since it is measured from midnight, not noon. Return  | 
2322  |  |      * value is one-based.  | 
2323  |  |      *  | 
2324  |  |      * @param julian  The given Julian date number.  | 
2325  |  |      * @return   Day number from 1..7 (SUN..SAT).  | 
2326  |  |      * @internal  | 
2327  |  |      */  | 
2328  |  |     static uint8_t julianDayToDayOfWeek(double julian);  | 
2329  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2330  |  |  | 
2331  |  |  private:  | 
2332  |  |     char validLocale[ULOC_FULLNAME_CAPACITY];  | 
2333  |  |     char actualLocale[ULOC_FULLNAME_CAPACITY];  | 
2334  |  |  | 
2335  |  |  public:  | 
2336  |  | #if !UCONFIG_NO_SERVICE  | 
2337  |  |     /**  | 
2338  |  |      * INTERNAL FOR 2.6 --  Registration.  | 
2339  |  |      */  | 
2340  |  |  | 
2341  |  | #ifndef U_HIDE_INTERNAL_API  | 
2342  |  |     /**  | 
2343  |  |      * Return a StringEnumeration over the locales available at the time of the call,  | 
2344  |  |      * including registered locales.  | 
2345  |  |      * @return a StringEnumeration over the locales available at the time of the call  | 
2346  |  |      * @internal  | 
2347  |  |      */  | 
2348  |  |     static StringEnumeration* getAvailableLocales(void);  | 
2349  |  |  | 
2350  |  |     /**  | 
2351  |  |      * Register a new Calendar factory.  The factory will be adopted.  | 
2352  |  |      * INTERNAL in 2.6  | 
2353  |  |      *  | 
2354  |  |      * Because ICU may choose to cache Calendars internally, this must  | 
2355  |  |      * be called at application startup, prior to any calls to  | 
2356  |  |      * Calendar::createInstance to avoid undefined behavior.  | 
2357  |  |      *  | 
2358  |  |      * @param toAdopt the factory instance to be adopted  | 
2359  |  |      * @param status the in/out status code, no special meanings are assigned  | 
2360  |  |      * @return a registry key that can be used to unregister this factory  | 
2361  |  |      * @internal  | 
2362  |  |      */  | 
2363  |  |     static URegistryKey registerFactory(ICUServiceFactory* toAdopt, UErrorCode& status);  | 
2364  |  |  | 
2365  |  |     /**  | 
2366  |  |      * Unregister a previously-registered CalendarFactory using the key returned from the  | 
2367  |  |      * register call.  Key becomes invalid after a successful call and should not be used again.  | 
2368  |  |      * The CalendarFactory corresponding to the key will be deleted.  | 
2369  |  |      * INTERNAL in 2.6  | 
2370  |  |      *  | 
2371  |  |      * Because ICU may choose to cache Calendars internally, this should  | 
2372  |  |      * be called during application shutdown, after all calls to  | 
2373  |  |      * Calendar::createInstance to avoid undefined behavior.  | 
2374  |  |      *  | 
2375  |  |      * @param key the registry key returned by a previous call to registerFactory  | 
2376  |  |      * @param status the in/out status code, no special meanings are assigned  | 
2377  |  |      * @return true if the factory for the key was successfully unregistered  | 
2378  |  |      * @internal  | 
2379  |  |      */  | 
2380  |  |     static UBool unregister(URegistryKey key, UErrorCode& status);  | 
2381  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2382  |  |  | 
2383  |  |     /**  | 
2384  |  |      * Multiple Calendar Implementation  | 
2385  |  |      * @internal  | 
2386  |  |      */  | 
2387  |  |     friend class CalendarFactory;  | 
2388  |  |  | 
2389  |  |     /**  | 
2390  |  |      * Multiple Calendar Implementation  | 
2391  |  |      * @internal  | 
2392  |  |      */  | 
2393  |  |     friend class CalendarService;  | 
2394  |  |  | 
2395  |  |     /**  | 
2396  |  |      * Multiple Calendar Implementation  | 
2397  |  |      * @internal  | 
2398  |  |      */  | 
2399  |  |     friend class DefaultCalendarFactory;  | 
2400  |  | #endif /* !UCONFIG_NO_SERVICE */  | 
2401  |  |  | 
2402  |  |     /**  | 
2403  |  |      * @return true if this calendar has a default century (i.e. 03 -> 2003)  | 
2404  |  |      * @internal  | 
2405  |  |      */  | 
2406  |  |     virtual UBool haveDefaultCentury() const = 0;  | 
2407  |  |  | 
2408  |  |     /**  | 
2409  |  |      * @return the start of the default century, as a UDate  | 
2410  |  |      * @internal  | 
2411  |  |      */  | 
2412  |  |     virtual UDate defaultCenturyStart() const = 0;  | 
2413  |  |     /**  | 
2414  |  |      * @return the beginning year of the default century, as a year  | 
2415  |  |      * @internal  | 
2416  |  |      */  | 
2417  |  |     virtual int32_t defaultCenturyStartYear() const = 0;  | 
2418  |  |  | 
2419  |  |     /** Get the locale for this calendar object. You can choose between valid and actual locale.  | 
2420  |  |      *  @param type type of the locale we're looking for (valid or actual)  | 
2421  |  |      *  @param status error code for the operation  | 
2422  |  |      *  @return the locale  | 
2423  |  |      *  @stable ICU 2.8  | 
2424  |  |      */  | 
2425  |  |     Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const;  | 
2426  |  |  | 
2427  |  |     /**  | 
2428  |  |      * @return      The related Gregorian year; will be obtained by modifying the value  | 
2429  |  |      *              obtained by get from UCAL_EXTENDED_YEAR field  | 
2430  |  |      * @internal  | 
2431  |  |      */  | 
2432  |  |     virtual int32_t getRelatedYear(UErrorCode &status) const;  | 
2433  |  |  | 
2434  |  |     /**  | 
2435  |  |      * @param year  The related Gregorian year to set; will be modified as necessary then  | 
2436  |  |      *              set in UCAL_EXTENDED_YEAR field  | 
2437  |  |      * @internal  | 
2438  |  |      */  | 
2439  |  |     virtual void setRelatedYear(int32_t year);  | 
2440  |  |  | 
2441  |  | #ifndef U_HIDE_INTERNAL_API  | 
2442  |  |     /** Get the locale for this calendar object. You can choose between valid and actual locale.  | 
2443  |  |      *  @param type type of the locale we're looking for (valid or actual)  | 
2444  |  |      *  @param status error code for the operation  | 
2445  |  |      *  @return the locale  | 
2446  |  |      *  @internal  | 
2447  |  |      */  | 
2448  |  |     const char* getLocaleID(ULocDataLocaleType type, UErrorCode &status) const;  | 
2449  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2450  |  |  | 
2451  |  | private:  | 
2452  |  |     /**  | 
2453  |  |      * Cast TimeZone used by this object to BasicTimeZone, or NULL if the TimeZone  | 
2454  |  |      * is not an instance of BasicTimeZone.  | 
2455  |  |      */  | 
2456  |  |     BasicTimeZone* getBasicTimeZone() const;  | 
2457  |  |  | 
2458  |  |     /**  | 
2459  |  |      * Find the previous zone transition near the given time.  | 
2460  |  |      * @param base The base time, inclusive  | 
2461  |  |      * @param transitionTime Receives the result time  | 
2462  |  |      * @param status The error status  | 
2463  |  |      * @return true if a transition is found.  | 
2464  |  |      */  | 
2465  |  |     UBool getImmediatePreviousZoneTransition(UDate base, UDate *transitionTime, UErrorCode& status) const;  | 
2466  |  |  | 
2467  |  | public:  | 
2468  |  | #ifndef U_HIDE_INTERNAL_API  | 
2469  |  |     /**  | 
2470  |  |      * Creates a new Calendar from a Locale for the cache.  | 
2471  |  |      * This method does not set the time or timezone in returned calendar.  | 
2472  |  |      * @param locale the locale.  | 
2473  |  |      * @param status any error returned here.  | 
2474  |  |      * @return the new Calendar object with no time or timezone set.  | 
2475  |  |      * @internal For ICU use only.  | 
2476  |  |      */  | 
2477  |  |     static Calendar * U_EXPORT2 makeInstance(  | 
2478  |  |             const Locale &locale, UErrorCode &status);  | 
2479  |  |  | 
2480  |  |     /**  | 
2481  |  |      * Get the calendar type for given locale.  | 
2482  |  |      * @param locale the locale  | 
2483  |  |      * @param typeBuffer calendar type returned here  | 
2484  |  |      * @param typeBufferSize The size of typeBuffer in bytes. If the type  | 
2485  |  |      *   can't fit in the buffer, this method sets status to  | 
2486  |  |      *   U_BUFFER_OVERFLOW_ERROR  | 
2487  |  |      * @param status error, if any, returned here.  | 
2488  |  |      * @internal For ICU use only.  | 
2489  |  |      */  | 
2490  |  |     static void U_EXPORT2 getCalendarTypeFromLocale(  | 
2491  |  |             const Locale &locale,  | 
2492  |  |             char *typeBuffer,  | 
2493  |  |             int32_t typeBufferSize,  | 
2494  |  |             UErrorCode &status);  | 
2495  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2496  |  | };  | 
2497  |  |  | 
2498  |  | // -------------------------------------  | 
2499  |  |  | 
2500  |  | inline Calendar*  | 
2501  |  | Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)  | 
2502  | 0  | { | 
2503  | 0  |     // since the Locale isn't specified, use the default locale  | 
2504  | 0  |     return createInstance(zone, Locale::getDefault(), errorCode);  | 
2505  | 0  | }  | 
2506  |  |  | 
2507  |  | // -------------------------------------  | 
2508  |  |  | 
2509  |  | inline void  | 
2510  |  | Calendar::roll(UCalendarDateFields field, UBool up, UErrorCode& status)  | 
2511  | 0  | { | 
2512  | 0  |     roll(field, (int32_t)(up ? +1 : -1), status);  | 
2513  | 0  | }  | 
2514  |  |  | 
2515  |  | #ifndef U_HIDE_DEPRECATED_API  | 
2516  |  | inline void  | 
2517  |  | Calendar::roll(EDateFields field, UBool up, UErrorCode& status)  | 
2518  | 0  | { | 
2519  | 0  |     roll((UCalendarDateFields) field, up, status);  | 
2520  | 0  | }  | 
2521  |  | #endif  /* U_HIDE_DEPRECATED_API */  | 
2522  |  |  | 
2523  |  |  | 
2524  |  | // -------------------------------------  | 
2525  |  |  | 
2526  |  | /**  | 
2527  |  |  * Fast method for subclasses.  The caller must maintain fUserSetDSTOffset and  | 
2528  |  |  * fUserSetZoneOffset, as well as the isSet[] array.  | 
2529  |  |  */  | 
2530  |  |  | 
2531  |  | inline void  | 
2532  |  | Calendar::internalSet(UCalendarDateFields field, int32_t value)  | 
2533  | 0  | { | 
2534  | 0  |     fFields[field] = value;  | 
2535  | 0  |     fStamp[field] = kInternallySet;  | 
2536  | 0  |     fIsSet[field]     = true; // Remove later  | 
2537  | 0  | }  | 
2538  |  |  | 
2539  |  |  | 
2540  |  | #ifndef U_HIDE_INTERNAL_API  | 
2541  |  | inline int32_t  Calendar::weekNumber(int32_t dayOfPeriod, int32_t dayOfWeek)  | 
2542  | 0  | { | 
2543  | 0  |   return weekNumber(dayOfPeriod, dayOfPeriod, dayOfWeek);  | 
2544  | 0  | }  | 
2545  |  | #endif  /* U_HIDE_INTERNAL_API */  | 
2546  |  |  | 
2547  |  | U_NAMESPACE_END  | 
2548  |  |  | 
2549  |  | #endif /* #if !UCONFIG_NO_FORMATTING */  | 
2550  |  |  | 
2551  |  | #endif /* U_SHOW_CPLUSPLUS_API */  | 
2552  |  |  | 
2553  |  | #endif // _CALENDAR  |