xref: /aosp_15_r20/external/icu/libandroidicu/include/unicode/ucal.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker  *******************************************************************************
5*0e209d39SAndroid Build Coastguard Worker  * Copyright (C) 1996-2015, International Business Machines Corporation and
6*0e209d39SAndroid Build Coastguard Worker  * others. All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker  *******************************************************************************
8*0e209d39SAndroid Build Coastguard Worker  */
9*0e209d39SAndroid Build Coastguard Worker 
10*0e209d39SAndroid Build Coastguard Worker #ifndef UCAL_H
11*0e209d39SAndroid Build Coastguard Worker #define UCAL_H
12*0e209d39SAndroid Build Coastguard Worker 
13*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
14*0e209d39SAndroid Build Coastguard Worker #include "unicode/uenum.h"
15*0e209d39SAndroid Build Coastguard Worker #include "unicode/uloc.h"
16*0e209d39SAndroid Build Coastguard Worker 
17*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
18*0e209d39SAndroid Build Coastguard Worker #include "unicode/localpointer.h"
19*0e209d39SAndroid Build Coastguard Worker #endif   // U_SHOW_CPLUSPLUS_API
20*0e209d39SAndroid Build Coastguard Worker 
21*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
22*0e209d39SAndroid Build Coastguard Worker 
23*0e209d39SAndroid Build Coastguard Worker /**
24*0e209d39SAndroid Build Coastguard Worker  * \file
25*0e209d39SAndroid Build Coastguard Worker  * \brief C API: Calendar
26*0e209d39SAndroid Build Coastguard Worker  *
27*0e209d39SAndroid Build Coastguard Worker  * <h2>Calendar C API</h2>
28*0e209d39SAndroid Build Coastguard Worker  *
29*0e209d39SAndroid Build Coastguard Worker  * UCalendar C API is used  for converting between a <code>UDate</code> object
30*0e209d39SAndroid Build Coastguard Worker  * and a set of integer fields such as <code>UCAL_YEAR</code>, <code>UCAL_MONTH</code>,
31*0e209d39SAndroid Build Coastguard Worker  * <code>UCAL_DAY</code>, <code>UCAL_HOUR</code>, and so on.
32*0e209d39SAndroid Build Coastguard Worker  * (A <code>UDate</code> object represents a specific instant in
33*0e209d39SAndroid Build Coastguard Worker  * time with millisecond precision. See UDate
34*0e209d39SAndroid Build Coastguard Worker  * for information about the <code>UDate</code> .)
35*0e209d39SAndroid Build Coastguard Worker  *
36*0e209d39SAndroid Build Coastguard Worker  * <p>
37*0e209d39SAndroid Build Coastguard Worker  * Types of <code>UCalendar</code> interpret a <code>UDate</code>
38*0e209d39SAndroid Build Coastguard Worker  * according to the rules of a specific calendar system. The C API
39*0e209d39SAndroid Build Coastguard Worker  * provides the enum UCalendarType with UCAL_TRADITIONAL and
40*0e209d39SAndroid Build Coastguard Worker  * UCAL_GREGORIAN.
41*0e209d39SAndroid Build Coastguard Worker  * <p>
42*0e209d39SAndroid Build Coastguard Worker  * Like other locale-sensitive C API, calendar API  provides a
43*0e209d39SAndroid Build Coastguard Worker  * function, <code>ucal_open()</code>, which returns a pointer to
44*0e209d39SAndroid Build Coastguard Worker  * <code>UCalendar</code> whose time fields have been initialized
45*0e209d39SAndroid Build Coastguard Worker  * with the current date and time. We need to specify the type of
46*0e209d39SAndroid Build Coastguard Worker  * calendar to be opened and the  timezoneId.
47*0e209d39SAndroid Build Coastguard Worker  * \htmlonly<blockquote>\endhtmlonly
48*0e209d39SAndroid Build Coastguard Worker  * <pre>
49*0e209d39SAndroid Build Coastguard Worker  * \code
50*0e209d39SAndroid Build Coastguard Worker  * UCalendar *caldef;
51*0e209d39SAndroid Build Coastguard Worker  * UChar *tzId;
52*0e209d39SAndroid Build Coastguard Worker  * UErrorCode status;
53*0e209d39SAndroid Build Coastguard Worker  * tzId=(UChar*)malloc(sizeof(UChar) * (strlen("PST") +1) );
54*0e209d39SAndroid Build Coastguard Worker  * u_uastrcpy(tzId, "PST");
55*0e209d39SAndroid Build Coastguard Worker  * caldef=ucal_open(tzID, u_strlen(tzID), NULL, UCAL_TRADITIONAL, &status);
56*0e209d39SAndroid Build Coastguard Worker  * \endcode
57*0e209d39SAndroid Build Coastguard Worker  * </pre>
58*0e209d39SAndroid Build Coastguard Worker  * \htmlonly</blockquote>\endhtmlonly
59*0e209d39SAndroid Build Coastguard Worker  *
60*0e209d39SAndroid Build Coastguard Worker  * <p>
61*0e209d39SAndroid Build Coastguard Worker  * A <code>UCalendar</code> object can produce all the time field values
62*0e209d39SAndroid Build Coastguard Worker  * needed to implement the date-time formatting for a particular language
63*0e209d39SAndroid Build Coastguard Worker  * and calendar style (for example, Japanese-Gregorian, Japanese-Traditional).
64*0e209d39SAndroid Build Coastguard Worker  *
65*0e209d39SAndroid Build Coastguard Worker  * <p>
66*0e209d39SAndroid Build Coastguard Worker  * When computing a <code>UDate</code> from time fields, two special circumstances
67*0e209d39SAndroid Build Coastguard Worker  * may arise: there may be insufficient information to compute the
68*0e209d39SAndroid Build Coastguard Worker  * <code>UDate</code> (such as only year and month but no day in the month),
69*0e209d39SAndroid Build Coastguard Worker  * or there may be inconsistent information (such as "Tuesday, July 15, 1996"
70*0e209d39SAndroid Build Coastguard Worker  * -- July 15, 1996 is actually a Monday).
71*0e209d39SAndroid Build Coastguard Worker  *
72*0e209d39SAndroid Build Coastguard Worker  * <p>
73*0e209d39SAndroid Build Coastguard Worker  * <strong>Insufficient information.</strong> The calendar will use default
74*0e209d39SAndroid Build Coastguard Worker  * information to specify the missing fields. This may vary by calendar; for
75*0e209d39SAndroid Build Coastguard Worker  * the Gregorian calendar, the default for a field is the same as that of the
76*0e209d39SAndroid Build Coastguard Worker  * start of the epoch: i.e., UCAL_YEAR = 1970, UCAL_MONTH = JANUARY, UCAL_DATE = 1, etc.
77*0e209d39SAndroid Build Coastguard Worker  *
78*0e209d39SAndroid Build Coastguard Worker  * <p>
79*0e209d39SAndroid Build Coastguard Worker  * <strong>Inconsistent information.</strong> If fields conflict, the calendar
80*0e209d39SAndroid Build Coastguard Worker  * will give preference to fields set more recently. For example, when
81*0e209d39SAndroid Build Coastguard Worker  * determining the day, the calendar will look for one of the following
82*0e209d39SAndroid Build Coastguard Worker  * combinations of fields.  The most recent combination, as determined by the
83*0e209d39SAndroid Build Coastguard Worker  * most recently set single field, will be used.
84*0e209d39SAndroid Build Coastguard Worker  *
85*0e209d39SAndroid Build Coastguard Worker  * \htmlonly<blockquote>\endhtmlonly
86*0e209d39SAndroid Build Coastguard Worker  * <pre>
87*0e209d39SAndroid Build Coastguard Worker  * \code
88*0e209d39SAndroid Build Coastguard Worker  * UCAL_MONTH + UCAL_DAY_OF_MONTH
89*0e209d39SAndroid Build Coastguard Worker  * UCAL_MONTH + UCAL_WEEK_OF_MONTH + UCAL_DAY_OF_WEEK
90*0e209d39SAndroid Build Coastguard Worker  * UCAL_MONTH + UCAL_DAY_OF_WEEK_IN_MONTH + UCAL_DAY_OF_WEEK
91*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_YEAR
92*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK + UCAL_WEEK_OF_YEAR
93*0e209d39SAndroid Build Coastguard Worker  * \endcode
94*0e209d39SAndroid Build Coastguard Worker  * </pre>
95*0e209d39SAndroid Build Coastguard Worker  * \htmlonly</blockquote>\endhtmlonly
96*0e209d39SAndroid Build Coastguard Worker  *
97*0e209d39SAndroid Build Coastguard Worker  * For the time of day:
98*0e209d39SAndroid Build Coastguard Worker  *
99*0e209d39SAndroid Build Coastguard Worker  * \htmlonly<blockquote>\endhtmlonly
100*0e209d39SAndroid Build Coastguard Worker  * <pre>
101*0e209d39SAndroid Build Coastguard Worker  * \code
102*0e209d39SAndroid Build Coastguard Worker  * UCAL_HOUR_OF_DAY
103*0e209d39SAndroid Build Coastguard Worker  * UCAL_AM_PM + UCAL_HOUR
104*0e209d39SAndroid Build Coastguard Worker  * \endcode
105*0e209d39SAndroid Build Coastguard Worker  * </pre>
106*0e209d39SAndroid Build Coastguard Worker  * \htmlonly</blockquote>\endhtmlonly
107*0e209d39SAndroid Build Coastguard Worker  *
108*0e209d39SAndroid Build Coastguard Worker  * <p>
109*0e209d39SAndroid Build Coastguard Worker  * <strong>Note:</strong> for some non-Gregorian calendars, different
110*0e209d39SAndroid Build Coastguard Worker  * fields may be necessary for complete disambiguation. For example, a full
111*0e209d39SAndroid Build Coastguard Worker  * specification of the historical Arabic astronomical calendar requires year,
112*0e209d39SAndroid Build Coastguard Worker  * month, day-of-month <em>and</em> day-of-week in some cases.
113*0e209d39SAndroid Build Coastguard Worker  *
114*0e209d39SAndroid Build Coastguard Worker  * <p>
115*0e209d39SAndroid Build Coastguard Worker  * <strong>Note:</strong> There are certain possible ambiguities in
116*0e209d39SAndroid Build Coastguard Worker  * interpretation of certain singular times, which are resolved in the
117*0e209d39SAndroid Build Coastguard Worker  * following ways:
118*0e209d39SAndroid Build Coastguard Worker  * <ol>
119*0e209d39SAndroid Build Coastguard Worker  *     <li> 24:00:00 "belongs" to the following day. That is,
120*0e209d39SAndroid Build Coastguard Worker  *          23:59 on Dec 31, 1969 &lt; 24:00 on Jan 1, 1970 &lt; 24:01:00 on Jan 1, 1970
121*0e209d39SAndroid Build Coastguard Worker  *
122*0e209d39SAndroid Build Coastguard Worker  *     <li> Although historically not precise, midnight also belongs to "am",
123*0e209d39SAndroid Build Coastguard Worker  *          and noon belongs to "pm", so on the same day,
124*0e209d39SAndroid Build Coastguard Worker  *          12:00 am (midnight) &lt; 12:01 am, and 12:00 pm (noon) &lt; 12:01 pm
125*0e209d39SAndroid Build Coastguard Worker  * </ol>
126*0e209d39SAndroid Build Coastguard Worker  *
127*0e209d39SAndroid Build Coastguard Worker  * <p>
128*0e209d39SAndroid Build Coastguard Worker  * The date or time format strings are not part of the definition of a
129*0e209d39SAndroid Build Coastguard Worker  * calendar, as those must be modifiable or overridable by the user at
130*0e209d39SAndroid Build Coastguard Worker  * runtime. Use {@link icu::DateFormat}
131*0e209d39SAndroid Build Coastguard Worker  * to format dates.
132*0e209d39SAndroid Build Coastguard Worker  *
133*0e209d39SAndroid Build Coastguard Worker  * <p>
134*0e209d39SAndroid Build Coastguard Worker  * <code>Calendar</code> provides an API for field "rolling", where fields
135*0e209d39SAndroid Build Coastguard Worker  * can be incremented or decremented, but wrap around. For example, rolling the
136*0e209d39SAndroid Build Coastguard Worker  * month up in the date <code>December 12, <b>1996</b></code> results in
137*0e209d39SAndroid Build Coastguard Worker  * <code>January 12, <b>1996</b></code>.
138*0e209d39SAndroid Build Coastguard Worker  *
139*0e209d39SAndroid Build Coastguard Worker  * <p>
140*0e209d39SAndroid Build Coastguard Worker  * <code>Calendar</code> also provides a date arithmetic function for
141*0e209d39SAndroid Build Coastguard Worker  * adding the specified (signed) amount of time to a particular time field.
142*0e209d39SAndroid Build Coastguard Worker  * For example, subtracting 5 days from the date <code>September 12, 1996</code>
143*0e209d39SAndroid Build Coastguard Worker  * results in <code>September 7, 1996</code>.
144*0e209d39SAndroid Build Coastguard Worker  *
145*0e209d39SAndroid Build Coastguard Worker  * <p>
146*0e209d39SAndroid Build Coastguard Worker  * The Japanese calendar uses a combination of era name and year number.
147*0e209d39SAndroid Build Coastguard Worker  * When an emperor of Japan abdicates and a new emperor ascends the throne,
148*0e209d39SAndroid Build Coastguard Worker  * a new era is declared and year number is reset to 1. Even if the date of
149*0e209d39SAndroid Build Coastguard Worker  * abdication is scheduled ahead of time, the new era name might not be
150*0e209d39SAndroid Build Coastguard Worker  * announced until just before the date. In such case, ICU4C may include
151*0e209d39SAndroid Build Coastguard Worker  * a start date of future era without actual era name, but not enabled
152*0e209d39SAndroid Build Coastguard Worker  * by default. ICU4C users who want to test the behavior of the future era
153*0e209d39SAndroid Build Coastguard Worker  * can enable the tentative era by:
154*0e209d39SAndroid Build Coastguard Worker  * <ul>
155*0e209d39SAndroid Build Coastguard Worker  * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
156*0e209d39SAndroid Build Coastguard Worker  * </ul>
157*0e209d39SAndroid Build Coastguard Worker  *
158*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
159*0e209d39SAndroid Build Coastguard Worker  */
160*0e209d39SAndroid Build Coastguard Worker 
161*0e209d39SAndroid Build Coastguard Worker /**
162*0e209d39SAndroid Build Coastguard Worker  * The time zone ID reserved for unknown time zone.
163*0e209d39SAndroid Build Coastguard Worker  * It behaves like the GMT/UTC time zone but has the special ID "Etc/Unknown".
164*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.8
165*0e209d39SAndroid Build Coastguard Worker  */
166*0e209d39SAndroid Build Coastguard Worker #define UCAL_UNKNOWN_ZONE_ID "Etc/Unknown"
167*0e209d39SAndroid Build Coastguard Worker 
168*0e209d39SAndroid Build Coastguard Worker /** A calendar.
169*0e209d39SAndroid Build Coastguard Worker  *  For usage in C programs.
170*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
171*0e209d39SAndroid Build Coastguard Worker  */
172*0e209d39SAndroid Build Coastguard Worker typedef void* UCalendar;
173*0e209d39SAndroid Build Coastguard Worker 
174*0e209d39SAndroid Build Coastguard Worker /** Possible types of UCalendars
175*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
176*0e209d39SAndroid Build Coastguard Worker  */
177*0e209d39SAndroid Build Coastguard Worker enum UCalendarType {
178*0e209d39SAndroid Build Coastguard Worker   /**
179*0e209d39SAndroid Build Coastguard Worker    * Despite the name, UCAL_TRADITIONAL designates the locale's default calendar,
180*0e209d39SAndroid Build Coastguard Worker    * which may be the Gregorian calendar or some other calendar.
181*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.0
182*0e209d39SAndroid Build Coastguard Worker    */
183*0e209d39SAndroid Build Coastguard Worker   UCAL_TRADITIONAL,
184*0e209d39SAndroid Build Coastguard Worker   /**
185*0e209d39SAndroid Build Coastguard Worker    * A better name for UCAL_TRADITIONAL.
186*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 4.2
187*0e209d39SAndroid Build Coastguard Worker    */
188*0e209d39SAndroid Build Coastguard Worker   UCAL_DEFAULT = UCAL_TRADITIONAL,
189*0e209d39SAndroid Build Coastguard Worker   /**
190*0e209d39SAndroid Build Coastguard Worker    * Unambiguously designates the Gregorian calendar for the locale.
191*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.0
192*0e209d39SAndroid Build Coastguard Worker    */
193*0e209d39SAndroid Build Coastguard Worker   UCAL_GREGORIAN
194*0e209d39SAndroid Build Coastguard Worker };
195*0e209d39SAndroid Build Coastguard Worker 
196*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
197*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarType UCalendarType;
198*0e209d39SAndroid Build Coastguard Worker 
199*0e209d39SAndroid Build Coastguard Worker /** Possible fields in a UCalendar
200*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
201*0e209d39SAndroid Build Coastguard Worker  */
202*0e209d39SAndroid Build Coastguard Worker enum UCalendarDateFields {
203*0e209d39SAndroid Build Coastguard Worker   /**
204*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the era, e.g., AD or BC in the Gregorian (Julian) calendar.
205*0e209d39SAndroid Build Coastguard Worker    * This is a calendar-specific value.
206*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
207*0e209d39SAndroid Build Coastguard Worker    */
208*0e209d39SAndroid Build Coastguard Worker   UCAL_ERA,
209*0e209d39SAndroid Build Coastguard Worker 
210*0e209d39SAndroid Build Coastguard Worker   /**
211*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the year. This is a calendar-specific value.
212*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
213*0e209d39SAndroid Build Coastguard Worker    */
214*0e209d39SAndroid Build Coastguard Worker   UCAL_YEAR,
215*0e209d39SAndroid Build Coastguard Worker 
216*0e209d39SAndroid Build Coastguard Worker   /**
217*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the month. This is a calendar-specific value.
218*0e209d39SAndroid Build Coastguard Worker    * The first month of the year is
219*0e209d39SAndroid Build Coastguard Worker    * <code>JANUARY</code>; the last depends on the number of months in a year.
220*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_JANUARY
221*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_FEBRUARY
222*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_MARCH
223*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_APRIL
224*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_MAY
225*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_JUNE
226*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_JULY
227*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_AUGUST
228*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_SEPTEMBER
229*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_OCTOBER
230*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_NOVEMBER
231*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_DECEMBER
232*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_UNDECIMBER
233*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
234*0e209d39SAndroid Build Coastguard Worker    */
235*0e209d39SAndroid Build Coastguard Worker   UCAL_MONTH,
236*0e209d39SAndroid Build Coastguard Worker 
237*0e209d39SAndroid Build Coastguard Worker   /**
238*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
239*0e209d39SAndroid Build Coastguard Worker    * week number within the current year.  The first week of the year, as
240*0e209d39SAndroid Build Coastguard Worker    * defined by <code>UCAL_FIRST_DAY_OF_WEEK</code> and <code>UCAL_MINIMAL_DAYS_IN_FIRST_WEEK</code>
241*0e209d39SAndroid Build Coastguard Worker    * attributes, has value 1.  Subclasses define
242*0e209d39SAndroid Build Coastguard Worker    * the value of <code>UCAL_WEEK_OF_YEAR</code> for days before the first week of
243*0e209d39SAndroid Build Coastguard Worker    * the year.
244*0e209d39SAndroid Build Coastguard Worker    * @see ucal_getAttribute
245*0e209d39SAndroid Build Coastguard Worker    * @see ucal_setAttribute
246*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
247*0e209d39SAndroid Build Coastguard Worker    */
248*0e209d39SAndroid Build Coastguard Worker   UCAL_WEEK_OF_YEAR,
249*0e209d39SAndroid Build Coastguard Worker 
250*0e209d39SAndroid Build Coastguard Worker  /**
251*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
252*0e209d39SAndroid Build Coastguard Worker    * week number within the current month.  The first week of the month, as
253*0e209d39SAndroid Build Coastguard Worker    * defined by <code>UCAL_FIRST_DAY_OF_WEEK</code> and <code>UCAL_MINIMAL_DAYS_IN_FIRST_WEEK</code>
254*0e209d39SAndroid Build Coastguard Worker    * attributes, has value 1.  Subclasses define
255*0e209d39SAndroid Build Coastguard Worker    * the value of <code>WEEK_OF_MONTH</code> for days before the first week of
256*0e209d39SAndroid Build Coastguard Worker    * the month.
257*0e209d39SAndroid Build Coastguard Worker    * @see ucal_getAttribute
258*0e209d39SAndroid Build Coastguard Worker    * @see ucal_setAttribute
259*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_FIRST_DAY_OF_WEEK
260*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
261*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
262*0e209d39SAndroid Build Coastguard Worker    */
263*0e209d39SAndroid Build Coastguard Worker   UCAL_WEEK_OF_MONTH,
264*0e209d39SAndroid Build Coastguard Worker 
265*0e209d39SAndroid Build Coastguard Worker  /**
266*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
267*0e209d39SAndroid Build Coastguard Worker    * day of the month. This is a synonym for <code>DAY_OF_MONTH</code>.
268*0e209d39SAndroid Build Coastguard Worker    * The first day of the month has value 1.
269*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_DAY_OF_MONTH
270*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
271*0e209d39SAndroid Build Coastguard Worker    */
272*0e209d39SAndroid Build Coastguard Worker   UCAL_DATE,
273*0e209d39SAndroid Build Coastguard Worker 
274*0e209d39SAndroid Build Coastguard Worker  /**
275*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the day
276*0e209d39SAndroid Build Coastguard Worker    * number within the current year.  The first day of the year has value 1.
277*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
278*0e209d39SAndroid Build Coastguard Worker    */
279*0e209d39SAndroid Build Coastguard Worker   UCAL_DAY_OF_YEAR,
280*0e209d39SAndroid Build Coastguard Worker 
281*0e209d39SAndroid Build Coastguard Worker  /**
282*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the day
283*0e209d39SAndroid Build Coastguard Worker    * of the week.  This field takes values <code>SUNDAY</code>,
284*0e209d39SAndroid Build Coastguard Worker    * <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>,
285*0e209d39SAndroid Build Coastguard Worker    * <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>.
286*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_SUNDAY
287*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_MONDAY
288*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_TUESDAY
289*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_WEDNESDAY
290*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_THURSDAY
291*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_FRIDAY
292*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_SATURDAY
293*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
294*0e209d39SAndroid Build Coastguard Worker    */
295*0e209d39SAndroid Build Coastguard Worker   UCAL_DAY_OF_WEEK,
296*0e209d39SAndroid Build Coastguard Worker 
297*0e209d39SAndroid Build Coastguard Worker  /**
298*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
299*0e209d39SAndroid Build Coastguard Worker    * ordinal number of the day of the week within the current month. Together
300*0e209d39SAndroid Build Coastguard Worker    * with the <code>DAY_OF_WEEK</code> field, this uniquely specifies a day
301*0e209d39SAndroid Build Coastguard Worker    * within a month.  Unlike <code>WEEK_OF_MONTH</code> and
302*0e209d39SAndroid Build Coastguard Worker    * <code>WEEK_OF_YEAR</code>, this field's value does <em>not</em> depend on
303*0e209d39SAndroid Build Coastguard Worker    * <code>getFirstDayOfWeek()</code> or
304*0e209d39SAndroid Build Coastguard Worker    * <code>getMinimalDaysInFirstWeek()</code>.  <code>DAY_OF_MONTH 1</code>
305*0e209d39SAndroid Build Coastguard Worker    * through <code>7</code> always correspond to <code>DAY_OF_WEEK_IN_MONTH
306*0e209d39SAndroid Build Coastguard Worker    * 1</code>; <code>8</code> through <code>15</code> correspond to
307*0e209d39SAndroid Build Coastguard Worker    * <code>DAY_OF_WEEK_IN_MONTH 2</code>, and so on.
308*0e209d39SAndroid Build Coastguard Worker    * <code>DAY_OF_WEEK_IN_MONTH 0</code> indicates the week before
309*0e209d39SAndroid Build Coastguard Worker    * <code>DAY_OF_WEEK_IN_MONTH 1</code>.  Negative values count back from the
310*0e209d39SAndroid Build Coastguard Worker    * end of the month, so the last Sunday of a month is specified as
311*0e209d39SAndroid Build Coastguard Worker    * <code>DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1</code>.  Because
312*0e209d39SAndroid Build Coastguard Worker    * negative values count backward they will usually be aligned differently
313*0e209d39SAndroid Build Coastguard Worker    * within the month than positive values.  For example, if a month has 31
314*0e209d39SAndroid Build Coastguard Worker    * days, <code>DAY_OF_WEEK_IN_MONTH -1</code> will overlap
315*0e209d39SAndroid Build Coastguard Worker    * <code>DAY_OF_WEEK_IN_MONTH 5</code> and the end of <code>4</code>.
316*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_DAY_OF_WEEK
317*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_WEEK_OF_MONTH
318*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
319*0e209d39SAndroid Build Coastguard Worker    */
320*0e209d39SAndroid Build Coastguard Worker   UCAL_DAY_OF_WEEK_IN_MONTH,
321*0e209d39SAndroid Build Coastguard Worker 
322*0e209d39SAndroid Build Coastguard Worker  /**
323*0e209d39SAndroid Build Coastguard Worker    * Field number indicating
324*0e209d39SAndroid Build Coastguard Worker    * whether the <code>HOUR</code> is before or after noon.
325*0e209d39SAndroid Build Coastguard Worker    * E.g., at 10:04:15.250 PM the <code>AM_PM</code> is <code>PM</code>.
326*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_AM
327*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_PM
328*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_HOUR
329*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
330*0e209d39SAndroid Build Coastguard Worker    */
331*0e209d39SAndroid Build Coastguard Worker   UCAL_AM_PM,
332*0e209d39SAndroid Build Coastguard Worker 
333*0e209d39SAndroid Build Coastguard Worker  /**
334*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
335*0e209d39SAndroid Build Coastguard Worker    * hour of the morning or afternoon. <code>HOUR</code> is used for the 12-hour
336*0e209d39SAndroid Build Coastguard Worker    * clock.
337*0e209d39SAndroid Build Coastguard Worker    * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10.
338*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_AM_PM
339*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_HOUR_OF_DAY
340*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
341*0e209d39SAndroid Build Coastguard Worker    */
342*0e209d39SAndroid Build Coastguard Worker   UCAL_HOUR,
343*0e209d39SAndroid Build Coastguard Worker 
344*0e209d39SAndroid Build Coastguard Worker  /**
345*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
346*0e209d39SAndroid Build Coastguard Worker    * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock.
347*0e209d39SAndroid Build Coastguard Worker    * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22.
348*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_HOUR
349*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
350*0e209d39SAndroid Build Coastguard Worker    */
351*0e209d39SAndroid Build Coastguard Worker   UCAL_HOUR_OF_DAY,
352*0e209d39SAndroid Build Coastguard Worker 
353*0e209d39SAndroid Build Coastguard Worker  /**
354*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
355*0e209d39SAndroid Build Coastguard Worker    * minute within the hour.
356*0e209d39SAndroid Build Coastguard Worker    * E.g., at 10:04:15.250 PM the <code>UCAL_MINUTE</code> is 4.
357*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
358*0e209d39SAndroid Build Coastguard Worker    */
359*0e209d39SAndroid Build Coastguard Worker   UCAL_MINUTE,
360*0e209d39SAndroid Build Coastguard Worker 
361*0e209d39SAndroid Build Coastguard Worker  /**
362*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
363*0e209d39SAndroid Build Coastguard Worker    * second within the minute.
364*0e209d39SAndroid Build Coastguard Worker    * E.g., at 10:04:15.250 PM the <code>UCAL_SECOND</code> is 15.
365*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
366*0e209d39SAndroid Build Coastguard Worker    */
367*0e209d39SAndroid Build Coastguard Worker   UCAL_SECOND,
368*0e209d39SAndroid Build Coastguard Worker 
369*0e209d39SAndroid Build Coastguard Worker  /**
370*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
371*0e209d39SAndroid Build Coastguard Worker    * millisecond within the second.
372*0e209d39SAndroid Build Coastguard Worker    * E.g., at 10:04:15.250 PM the <code>UCAL_MILLISECOND</code> is 250.
373*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
374*0e209d39SAndroid Build Coastguard Worker    */
375*0e209d39SAndroid Build Coastguard Worker   UCAL_MILLISECOND,
376*0e209d39SAndroid Build Coastguard Worker 
377*0e209d39SAndroid Build Coastguard Worker  /**
378*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
379*0e209d39SAndroid Build Coastguard Worker    * raw offset from GMT in milliseconds.
380*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
381*0e209d39SAndroid Build Coastguard Worker    */
382*0e209d39SAndroid Build Coastguard Worker   UCAL_ZONE_OFFSET,
383*0e209d39SAndroid Build Coastguard Worker 
384*0e209d39SAndroid Build Coastguard Worker  /**
385*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
386*0e209d39SAndroid Build Coastguard Worker    * daylight savings offset in milliseconds.
387*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
388*0e209d39SAndroid Build Coastguard Worker    */
389*0e209d39SAndroid Build Coastguard Worker   UCAL_DST_OFFSET,
390*0e209d39SAndroid Build Coastguard Worker 
391*0e209d39SAndroid Build Coastguard Worker  /**
392*0e209d39SAndroid Build Coastguard Worker    * Field number
393*0e209d39SAndroid Build Coastguard Worker    * indicating the extended year corresponding to the
394*0e209d39SAndroid Build Coastguard Worker    * <code>UCAL_WEEK_OF_YEAR</code> field.  This may be one greater or less
395*0e209d39SAndroid Build Coastguard Worker    * than the value of <code>UCAL_EXTENDED_YEAR</code>.
396*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
397*0e209d39SAndroid Build Coastguard Worker    */
398*0e209d39SAndroid Build Coastguard Worker   UCAL_YEAR_WOY,
399*0e209d39SAndroid Build Coastguard Worker 
400*0e209d39SAndroid Build Coastguard Worker  /**
401*0e209d39SAndroid Build Coastguard Worker    * Field number
402*0e209d39SAndroid Build Coastguard Worker    * indicating the localized day of week.  This will be a value from 1
403*0e209d39SAndroid Build Coastguard Worker    * to 7 inclusive, with 1 being the localized first day of the week.
404*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.6
405*0e209d39SAndroid Build Coastguard Worker    */
406*0e209d39SAndroid Build Coastguard Worker   UCAL_DOW_LOCAL,
407*0e209d39SAndroid Build Coastguard Worker 
408*0e209d39SAndroid Build Coastguard Worker   /**
409*0e209d39SAndroid Build Coastguard Worker    * Year of this calendar system, encompassing all supra-year fields. For example,
410*0e209d39SAndroid Build Coastguard Worker    * in Gregorian/Julian calendars, positive Extended Year values indicate years AD,
411*0e209d39SAndroid Build Coastguard Worker    *  1 BC = 0 extended, 2 BC = -1 extended, and so on.
412*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.8
413*0e209d39SAndroid Build Coastguard Worker    */
414*0e209d39SAndroid Build Coastguard Worker   UCAL_EXTENDED_YEAR,
415*0e209d39SAndroid Build Coastguard Worker 
416*0e209d39SAndroid Build Coastguard Worker  /**
417*0e209d39SAndroid Build Coastguard Worker    * Field number
418*0e209d39SAndroid Build Coastguard Worker    * indicating the modified Julian day number.  This is different from
419*0e209d39SAndroid Build Coastguard Worker    * the conventional Julian day number in two regards.  First, it
420*0e209d39SAndroid Build Coastguard Worker    * demarcates days at local zone midnight, rather than noon GMT.
421*0e209d39SAndroid Build Coastguard Worker    * Second, it is a local number; that is, it depends on the local time
422*0e209d39SAndroid Build Coastguard Worker    * zone.  It can be thought of as a single number that encompasses all
423*0e209d39SAndroid Build Coastguard Worker    * the date-related fields.
424*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.8
425*0e209d39SAndroid Build Coastguard Worker    */
426*0e209d39SAndroid Build Coastguard Worker   UCAL_JULIAN_DAY,
427*0e209d39SAndroid Build Coastguard Worker 
428*0e209d39SAndroid Build Coastguard Worker   /**
429*0e209d39SAndroid Build Coastguard Worker    * Ranges from 0 to 23:59:59.999 (regardless of DST).  This field behaves <em>exactly</em>
430*0e209d39SAndroid Build Coastguard Worker    * like a composite of all time-related fields, not including the zone fields.  As such,
431*0e209d39SAndroid Build Coastguard Worker    * it also reflects discontinuities of those fields on DST transition days.  On a day
432*0e209d39SAndroid Build Coastguard Worker    * of DST onset, it will jump forward.  On a day of DST cessation, it will jump
433*0e209d39SAndroid Build Coastguard Worker    * backward.  This reflects the fact that it must be combined with the DST_OFFSET field
434*0e209d39SAndroid Build Coastguard Worker    * to obtain a unique local time value.
435*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.8
436*0e209d39SAndroid Build Coastguard Worker    */
437*0e209d39SAndroid Build Coastguard Worker   UCAL_MILLISECONDS_IN_DAY,
438*0e209d39SAndroid Build Coastguard Worker 
439*0e209d39SAndroid Build Coastguard Worker   /**
440*0e209d39SAndroid Build Coastguard Worker    * Whether or not the current month is a leap month (0 or 1). See the Chinese calendar for
441*0e209d39SAndroid Build Coastguard Worker    * an example of this.
442*0e209d39SAndroid Build Coastguard Worker    */
443*0e209d39SAndroid Build Coastguard Worker   UCAL_IS_LEAP_MONTH,
444*0e209d39SAndroid Build Coastguard Worker 
445*0e209d39SAndroid Build Coastguard Worker   /**
446*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the month. This is a calendar-specific value.
447*0e209d39SAndroid Build Coastguard Worker    * Differ from UCAL_MONTH, this value is continuous and unique within a
448*0e209d39SAndroid Build Coastguard Worker    * year and range from 0 to 11 or 0 to 12 depending on how many months in a
449*0e209d39SAndroid Build Coastguard Worker    * year, the calendar system has leap month or not, and in leap year or not.
450*0e209d39SAndroid Build Coastguard Worker    * It is the ordinal position of that month in the corresponding year of
451*0e209d39SAndroid Build Coastguard Worker    * the calendar. For Chinese, Dangi, and Hebrew calendar, the range is
452*0e209d39SAndroid Build Coastguard Worker    * 0 to 11 in non-leap years and 0 to 12 in leap years. For Coptic and Ethiopian
453*0e209d39SAndroid Build Coastguard Worker    * calendar, the range is always 0 to 12. For other calendars supported by
454*0e209d39SAndroid Build Coastguard Worker    * ICU now, the range is 0 to 11. When the number of months in a year of the
455*0e209d39SAndroid Build Coastguard Worker    * identified calendar is variable, a different UCAL_ORDINAL_MONTH value can
456*0e209d39SAndroid Build Coastguard Worker    * be used for dates that are part of the same named month in different years.
457*0e209d39SAndroid Build Coastguard Worker    * For example, in the Hebrew calendar, "1 Nisan 5781" is associated with
458*0e209d39SAndroid Build Coastguard Worker    * UCAL_ORDINAL_MONTH value 6 while "1 Nisan 5782" is associated with
459*0e209d39SAndroid Build Coastguard Worker    * UCAL_ORDINAL_MONTH value 7 because 5782 is a leap year and Nisan follows
460*0e209d39SAndroid Build Coastguard Worker    * the insertion of Adar I. In Chinese calendar, "Year 4664 Month 6 Day 2"
461*0e209d39SAndroid Build Coastguard Worker    * is associated with UCAL_ORDINAL_MONTH value 5 while "Year 4665 Month 6 Day 2"
462*0e209d39SAndroid Build Coastguard Worker    * is associated with UCAL_ORDINAL_MONTH value 6 because 4665 is a leap year
463*0e209d39SAndroid Build Coastguard Worker    * and there is an extra "Leap Month 5" which associated with UCAL_ORDINAL_MONTH
464*0e209d39SAndroid Build Coastguard Worker    * value 5 before "Month 6" of year 4664.
465*0e209d39SAndroid Build Coastguard Worker    *
466*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 73
467*0e209d39SAndroid Build Coastguard Worker    */
468*0e209d39SAndroid Build Coastguard Worker   UCAL_ORDINAL_MONTH,
469*0e209d39SAndroid Build Coastguard Worker 
470*0e209d39SAndroid Build Coastguard Worker     /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API,
471*0e209d39SAndroid Build Coastguard Worker      * it is needed for layout of Calendar, DateFormat, and other objects */
472*0e209d39SAndroid Build Coastguard Worker #ifndef U_FORCE_HIDE_DEPRECATED_API
473*0e209d39SAndroid Build Coastguard Worker     /**
474*0e209d39SAndroid Build Coastguard Worker      * One more than the highest normal UCalendarDateFields value.
475*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
476*0e209d39SAndroid Build Coastguard Worker      */
477*0e209d39SAndroid Build Coastguard Worker     UCAL_FIELD_COUNT = UCAL_ORDINAL_MONTH + 1,
478*0e209d39SAndroid Build Coastguard Worker 
479*0e209d39SAndroid Build Coastguard Worker #endif  // U_FORCE_HIDE_DEPRECATED_API
480*0e209d39SAndroid Build Coastguard Worker 
481*0e209d39SAndroid Build Coastguard Worker  /**
482*0e209d39SAndroid Build Coastguard Worker    * Field number indicating the
483*0e209d39SAndroid Build Coastguard Worker    * day of the month. This is a synonym for <code>UCAL_DATE</code>.
484*0e209d39SAndroid Build Coastguard Worker    * The first day of the month has value 1.
485*0e209d39SAndroid Build Coastguard Worker    * @see #UCAL_DATE
486*0e209d39SAndroid Build Coastguard Worker    * Synonym for UCAL_DATE
487*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.8
488*0e209d39SAndroid Build Coastguard Worker    **/
489*0e209d39SAndroid Build Coastguard Worker   UCAL_DAY_OF_MONTH=UCAL_DATE
490*0e209d39SAndroid Build Coastguard Worker };
491*0e209d39SAndroid Build Coastguard Worker 
492*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
493*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarDateFields UCalendarDateFields;
494*0e209d39SAndroid Build Coastguard Worker     /**
495*0e209d39SAndroid Build Coastguard Worker      * Useful constant for days of week. Note: Calendar day-of-week is 1-based. Clients
496*0e209d39SAndroid Build Coastguard Worker      * who create locale resources for the field of first-day-of-week should be aware of
497*0e209d39SAndroid Build Coastguard Worker      * this. For instance, in US locale, first-day-of-week is set to 1, i.e., UCAL_SUNDAY.
498*0e209d39SAndroid Build Coastguard Worker      */
499*0e209d39SAndroid Build Coastguard Worker /** Possible days of the week in a UCalendar
500*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
501*0e209d39SAndroid Build Coastguard Worker  */
502*0e209d39SAndroid Build Coastguard Worker enum UCalendarDaysOfWeek {
503*0e209d39SAndroid Build Coastguard Worker   /** Sunday */
504*0e209d39SAndroid Build Coastguard Worker   UCAL_SUNDAY = 1,
505*0e209d39SAndroid Build Coastguard Worker   /** Monday */
506*0e209d39SAndroid Build Coastguard Worker   UCAL_MONDAY,
507*0e209d39SAndroid Build Coastguard Worker   /** Tuesday */
508*0e209d39SAndroid Build Coastguard Worker   UCAL_TUESDAY,
509*0e209d39SAndroid Build Coastguard Worker   /** Wednesday */
510*0e209d39SAndroid Build Coastguard Worker   UCAL_WEDNESDAY,
511*0e209d39SAndroid Build Coastguard Worker   /** Thursday */
512*0e209d39SAndroid Build Coastguard Worker   UCAL_THURSDAY,
513*0e209d39SAndroid Build Coastguard Worker   /** Friday */
514*0e209d39SAndroid Build Coastguard Worker   UCAL_FRIDAY,
515*0e209d39SAndroid Build Coastguard Worker   /** Saturday */
516*0e209d39SAndroid Build Coastguard Worker   UCAL_SATURDAY
517*0e209d39SAndroid Build Coastguard Worker };
518*0e209d39SAndroid Build Coastguard Worker 
519*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
520*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarDaysOfWeek UCalendarDaysOfWeek;
521*0e209d39SAndroid Build Coastguard Worker 
522*0e209d39SAndroid Build Coastguard Worker /** Possible months in a UCalendar. Note: Calendar month is 0-based.
523*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
524*0e209d39SAndroid Build Coastguard Worker  */
525*0e209d39SAndroid Build Coastguard Worker enum UCalendarMonths {
526*0e209d39SAndroid Build Coastguard Worker   /** January */
527*0e209d39SAndroid Build Coastguard Worker   UCAL_JANUARY,
528*0e209d39SAndroid Build Coastguard Worker   /** February */
529*0e209d39SAndroid Build Coastguard Worker   UCAL_FEBRUARY,
530*0e209d39SAndroid Build Coastguard Worker   /** March */
531*0e209d39SAndroid Build Coastguard Worker   UCAL_MARCH,
532*0e209d39SAndroid Build Coastguard Worker   /** April */
533*0e209d39SAndroid Build Coastguard Worker   UCAL_APRIL,
534*0e209d39SAndroid Build Coastguard Worker   /** May */
535*0e209d39SAndroid Build Coastguard Worker   UCAL_MAY,
536*0e209d39SAndroid Build Coastguard Worker   /** June */
537*0e209d39SAndroid Build Coastguard Worker   UCAL_JUNE,
538*0e209d39SAndroid Build Coastguard Worker   /** July */
539*0e209d39SAndroid Build Coastguard Worker   UCAL_JULY,
540*0e209d39SAndroid Build Coastguard Worker   /** August */
541*0e209d39SAndroid Build Coastguard Worker   UCAL_AUGUST,
542*0e209d39SAndroid Build Coastguard Worker   /** September */
543*0e209d39SAndroid Build Coastguard Worker   UCAL_SEPTEMBER,
544*0e209d39SAndroid Build Coastguard Worker   /** October */
545*0e209d39SAndroid Build Coastguard Worker   UCAL_OCTOBER,
546*0e209d39SAndroid Build Coastguard Worker   /** November */
547*0e209d39SAndroid Build Coastguard Worker   UCAL_NOVEMBER,
548*0e209d39SAndroid Build Coastguard Worker   /** December */
549*0e209d39SAndroid Build Coastguard Worker   UCAL_DECEMBER,
550*0e209d39SAndroid Build Coastguard Worker   /** Value of the <code>UCAL_MONTH</code> field indicating the
551*0e209d39SAndroid Build Coastguard Worker     * thirteenth month of the year. Although the Gregorian calendar
552*0e209d39SAndroid Build Coastguard Worker     * does not use this value, lunar calendars do.
553*0e209d39SAndroid Build Coastguard Worker     */
554*0e209d39SAndroid Build Coastguard Worker   UCAL_UNDECIMBER
555*0e209d39SAndroid Build Coastguard Worker };
556*0e209d39SAndroid Build Coastguard Worker 
557*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
558*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarMonths UCalendarMonths;
559*0e209d39SAndroid Build Coastguard Worker 
560*0e209d39SAndroid Build Coastguard Worker /** Possible AM/PM values in a UCalendar
561*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
562*0e209d39SAndroid Build Coastguard Worker  */
563*0e209d39SAndroid Build Coastguard Worker enum UCalendarAMPMs {
564*0e209d39SAndroid Build Coastguard Worker     /** AM */
565*0e209d39SAndroid Build Coastguard Worker   UCAL_AM,
566*0e209d39SAndroid Build Coastguard Worker   /** PM */
567*0e209d39SAndroid Build Coastguard Worker   UCAL_PM
568*0e209d39SAndroid Build Coastguard Worker };
569*0e209d39SAndroid Build Coastguard Worker 
570*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
571*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarAMPMs UCalendarAMPMs;
572*0e209d39SAndroid Build Coastguard Worker 
573*0e209d39SAndroid Build Coastguard Worker /**
574*0e209d39SAndroid Build Coastguard Worker  * System time zone type constants used by filtering zones
575*0e209d39SAndroid Build Coastguard Worker  * in ucal_openTimeZoneIDEnumeration.
576*0e209d39SAndroid Build Coastguard Worker  * @see ucal_openTimeZoneIDEnumeration
577*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.8
578*0e209d39SAndroid Build Coastguard Worker  */
579*0e209d39SAndroid Build Coastguard Worker enum USystemTimeZoneType {
580*0e209d39SAndroid Build Coastguard Worker     /**
581*0e209d39SAndroid Build Coastguard Worker      * Any system zones.
582*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 4.8
583*0e209d39SAndroid Build Coastguard Worker      */
584*0e209d39SAndroid Build Coastguard Worker     UCAL_ZONE_TYPE_ANY,
585*0e209d39SAndroid Build Coastguard Worker     /**
586*0e209d39SAndroid Build Coastguard Worker      * Canonical system zones.
587*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 4.8
588*0e209d39SAndroid Build Coastguard Worker      */
589*0e209d39SAndroid Build Coastguard Worker     UCAL_ZONE_TYPE_CANONICAL,
590*0e209d39SAndroid Build Coastguard Worker     /**
591*0e209d39SAndroid Build Coastguard Worker      * Canonical system zones associated with actual locations.
592*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 4.8
593*0e209d39SAndroid Build Coastguard Worker      */
594*0e209d39SAndroid Build Coastguard Worker     UCAL_ZONE_TYPE_CANONICAL_LOCATION
595*0e209d39SAndroid Build Coastguard Worker };
596*0e209d39SAndroid Build Coastguard Worker 
597*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 4.8 */
598*0e209d39SAndroid Build Coastguard Worker typedef enum USystemTimeZoneType USystemTimeZoneType;
599*0e209d39SAndroid Build Coastguard Worker 
600*0e209d39SAndroid Build Coastguard Worker /**
601*0e209d39SAndroid Build Coastguard Worker  * Create an enumeration over system time zone IDs with the given
602*0e209d39SAndroid Build Coastguard Worker  * filter conditions.
603*0e209d39SAndroid Build Coastguard Worker  * @param zoneType  The system time zone type.
604*0e209d39SAndroid Build Coastguard Worker  * @param region    The ISO 3166 two-letter country code or UN M.49
605*0e209d39SAndroid Build Coastguard Worker  *                  three-digit area code.  When NULL, no filtering
606*0e209d39SAndroid Build Coastguard Worker  *                  done by region.
607*0e209d39SAndroid Build Coastguard Worker  * @param rawOffset An offset from GMT in milliseconds, ignoring the
608*0e209d39SAndroid Build Coastguard Worker  *                  effect of daylight savings time, if any. When NULL,
609*0e209d39SAndroid Build Coastguard Worker  *                  no filtering done by zone offset.
610*0e209d39SAndroid Build Coastguard Worker  * @param ec        A pointer to an UErrorCode to receive any errors
611*0e209d39SAndroid Build Coastguard Worker  * @return  an enumeration object that the caller must dispose of
612*0e209d39SAndroid Build Coastguard Worker  *          using enum_close(), or NULL upon failure. In case of failure,
613*0e209d39SAndroid Build Coastguard Worker  *          *ec will indicate the error.
614*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.8
615*0e209d39SAndroid Build Coastguard Worker  */
616*0e209d39SAndroid Build Coastguard Worker U_CAPI UEnumeration* U_EXPORT2
617*0e209d39SAndroid Build Coastguard Worker ucal_openTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char* region,
618*0e209d39SAndroid Build Coastguard Worker                                 const int32_t* rawOffset, UErrorCode* ec);
619*0e209d39SAndroid Build Coastguard Worker 
620*0e209d39SAndroid Build Coastguard Worker /**
621*0e209d39SAndroid Build Coastguard Worker  * Create an enumeration over all time zones.
622*0e209d39SAndroid Build Coastguard Worker  *
623*0e209d39SAndroid Build Coastguard Worker  * @param ec input/output error code
624*0e209d39SAndroid Build Coastguard Worker  *
625*0e209d39SAndroid Build Coastguard Worker  * @return an enumeration object that the caller must dispose of using
626*0e209d39SAndroid Build Coastguard Worker  * uenum_close(), or NULL upon failure. In case of failure *ec will
627*0e209d39SAndroid Build Coastguard Worker  * indicate the error.
628*0e209d39SAndroid Build Coastguard Worker  *
629*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.6
630*0e209d39SAndroid Build Coastguard Worker  */
631*0e209d39SAndroid Build Coastguard Worker U_CAPI UEnumeration* U_EXPORT2
632*0e209d39SAndroid Build Coastguard Worker ucal_openTimeZones(UErrorCode* ec);
633*0e209d39SAndroid Build Coastguard Worker 
634*0e209d39SAndroid Build Coastguard Worker /**
635*0e209d39SAndroid Build Coastguard Worker  * Create an enumeration over all time zones associated with the given
636*0e209d39SAndroid Build Coastguard Worker  * country. Some zones are affiliated with no country (e.g., "UTC");
637*0e209d39SAndroid Build Coastguard Worker  * these may also be retrieved, as a group.
638*0e209d39SAndroid Build Coastguard Worker  *
639*0e209d39SAndroid Build Coastguard Worker  * @param country the ISO 3166 two-letter country code, or NULL to
640*0e209d39SAndroid Build Coastguard Worker  * retrieve zones not affiliated with any country
641*0e209d39SAndroid Build Coastguard Worker  *
642*0e209d39SAndroid Build Coastguard Worker  * @param ec input/output error code
643*0e209d39SAndroid Build Coastguard Worker  *
644*0e209d39SAndroid Build Coastguard Worker  * @return an enumeration object that the caller must dispose of using
645*0e209d39SAndroid Build Coastguard Worker  * uenum_close(), or NULL upon failure. In case of failure *ec will
646*0e209d39SAndroid Build Coastguard Worker  * indicate the error.
647*0e209d39SAndroid Build Coastguard Worker  *
648*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.6
649*0e209d39SAndroid Build Coastguard Worker  */
650*0e209d39SAndroid Build Coastguard Worker U_CAPI UEnumeration* U_EXPORT2
651*0e209d39SAndroid Build Coastguard Worker ucal_openCountryTimeZones(const char* country, UErrorCode* ec);
652*0e209d39SAndroid Build Coastguard Worker 
653*0e209d39SAndroid Build Coastguard Worker /**
654*0e209d39SAndroid Build Coastguard Worker  * Return the default time zone. The default is determined initially
655*0e209d39SAndroid Build Coastguard Worker  * by querying the host operating system. If the host system detection
656*0e209d39SAndroid Build Coastguard Worker  * routines fail, or if they specify a TimeZone or TimeZone offset
657*0e209d39SAndroid Build Coastguard Worker  * which is not recognized, then the special TimeZone "Etc/Unknown"
658*0e209d39SAndroid Build Coastguard Worker  * is returned.
659*0e209d39SAndroid Build Coastguard Worker  *
660*0e209d39SAndroid Build Coastguard Worker  * The default may be changed with `ucal_setDefaultTimeZone()` or with
661*0e209d39SAndroid Build Coastguard Worker  * the C++ TimeZone API, `TimeZone::adoptDefault(TimeZone*)`.
662*0e209d39SAndroid Build Coastguard Worker  *
663*0e209d39SAndroid Build Coastguard Worker  * @param result A buffer to receive the result, or NULL
664*0e209d39SAndroid Build Coastguard Worker  *
665*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity The capacity of the result buffer
666*0e209d39SAndroid Build Coastguard Worker  *
667*0e209d39SAndroid Build Coastguard Worker  * @param ec input/output error code
668*0e209d39SAndroid Build Coastguard Worker  *
669*0e209d39SAndroid Build Coastguard Worker  * @return The result string length, not including the terminating
670*0e209d39SAndroid Build Coastguard Worker  * null
671*0e209d39SAndroid Build Coastguard Worker  *
672*0e209d39SAndroid Build Coastguard Worker  * @see #UCAL_UNKNOWN_ZONE_ID
673*0e209d39SAndroid Build Coastguard Worker  *
674*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.6
675*0e209d39SAndroid Build Coastguard Worker  */
676*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
677*0e209d39SAndroid Build Coastguard Worker ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec);
678*0e209d39SAndroid Build Coastguard Worker 
679*0e209d39SAndroid Build Coastguard Worker /**
680*0e209d39SAndroid Build Coastguard Worker  * Set the default time zone.
681*0e209d39SAndroid Build Coastguard Worker  *
682*0e209d39SAndroid Build Coastguard Worker  * @param zoneID null-terminated time zone ID
683*0e209d39SAndroid Build Coastguard Worker  *
684*0e209d39SAndroid Build Coastguard Worker  * @param ec input/output error code
685*0e209d39SAndroid Build Coastguard Worker  *
686*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.6
687*0e209d39SAndroid Build Coastguard Worker  */
688*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
689*0e209d39SAndroid Build Coastguard Worker ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec);
690*0e209d39SAndroid Build Coastguard Worker 
691*0e209d39SAndroid Build Coastguard Worker /**
692*0e209d39SAndroid Build Coastguard Worker  * Return the current host time zone. The host time zone is detected from
693*0e209d39SAndroid Build Coastguard Worker  * the current host system configuration by querying the host operating
694*0e209d39SAndroid Build Coastguard Worker  * system. If the host system detection routines fail, or if they specify
695*0e209d39SAndroid Build Coastguard Worker  * a TimeZone or TimeZone offset which is not recognized, then the special
696*0e209d39SAndroid Build Coastguard Worker  * TimeZone "Etc/Unknown" is returned.
697*0e209d39SAndroid Build Coastguard Worker  *
698*0e209d39SAndroid Build Coastguard Worker  * Note that host time zone and the ICU default time zone can be different.
699*0e209d39SAndroid Build Coastguard Worker  *
700*0e209d39SAndroid Build Coastguard Worker  * The ICU default time zone does not change once initialized unless modified
701*0e209d39SAndroid Build Coastguard Worker  * by calling `ucal_setDefaultTimeZone()` or with the C++ TimeZone API,
702*0e209d39SAndroid Build Coastguard Worker  * `TimeZone::adoptDefault(TimeZone*)`.
703*0e209d39SAndroid Build Coastguard Worker  *
704*0e209d39SAndroid Build Coastguard Worker  * If the host operating system configuration has changed since ICU has
705*0e209d39SAndroid Build Coastguard Worker  * initialized then the returned value can be different than the ICU default
706*0e209d39SAndroid Build Coastguard Worker  * time zone, even if the default has not changed.
707*0e209d39SAndroid Build Coastguard Worker  *
708*0e209d39SAndroid Build Coastguard Worker  * <p>This function is not thread safe.</p>
709*0e209d39SAndroid Build Coastguard Worker  *
710*0e209d39SAndroid Build Coastguard Worker  * @param result A buffer to receive the result, or NULL
711*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity The capacity of the result buffer
712*0e209d39SAndroid Build Coastguard Worker  * @param ec input/output error code
713*0e209d39SAndroid Build Coastguard Worker  * @return The result string length, not including the terminating
714*0e209d39SAndroid Build Coastguard Worker  * null
715*0e209d39SAndroid Build Coastguard Worker  *
716*0e209d39SAndroid Build Coastguard Worker  * @see #UCAL_UNKNOWN_ZONE_ID
717*0e209d39SAndroid Build Coastguard Worker  *
718*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 65
719*0e209d39SAndroid Build Coastguard Worker  */
720*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
721*0e209d39SAndroid Build Coastguard Worker ucal_getHostTimeZone(UChar *result, int32_t resultCapacity, UErrorCode *ec);
722*0e209d39SAndroid Build Coastguard Worker 
723*0e209d39SAndroid Build Coastguard Worker /**
724*0e209d39SAndroid Build Coastguard Worker  * Return the amount of time in milliseconds that the clock is
725*0e209d39SAndroid Build Coastguard Worker  * advanced during daylight savings time for the given time zone, or
726*0e209d39SAndroid Build Coastguard Worker  * zero if the time zone does not observe daylight savings time.
727*0e209d39SAndroid Build Coastguard Worker  *
728*0e209d39SAndroid Build Coastguard Worker  * @param zoneID null-terminated time zone ID
729*0e209d39SAndroid Build Coastguard Worker  *
730*0e209d39SAndroid Build Coastguard Worker  * @param ec input/output error code
731*0e209d39SAndroid Build Coastguard Worker  *
732*0e209d39SAndroid Build Coastguard Worker  * @return the number of milliseconds the time is advanced with
733*0e209d39SAndroid Build Coastguard Worker  * respect to standard time when the daylight savings rules are in
734*0e209d39SAndroid Build Coastguard Worker  * effect. This is always a non-negative number, most commonly either
735*0e209d39SAndroid Build Coastguard Worker  * 3,600,000 (one hour) or zero.
736*0e209d39SAndroid Build Coastguard Worker  *
737*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.6
738*0e209d39SAndroid Build Coastguard Worker  */
739*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
740*0e209d39SAndroid Build Coastguard Worker ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec);
741*0e209d39SAndroid Build Coastguard Worker 
742*0e209d39SAndroid Build Coastguard Worker /**
743*0e209d39SAndroid Build Coastguard Worker  * Get the current date and time.
744*0e209d39SAndroid Build Coastguard Worker  * The value returned is represented as milliseconds from the epoch.
745*0e209d39SAndroid Build Coastguard Worker  * @return The current date and time.
746*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
747*0e209d39SAndroid Build Coastguard Worker  */
748*0e209d39SAndroid Build Coastguard Worker U_CAPI UDate U_EXPORT2
749*0e209d39SAndroid Build Coastguard Worker ucal_getNow(void);
750*0e209d39SAndroid Build Coastguard Worker 
751*0e209d39SAndroid Build Coastguard Worker /**
752*0e209d39SAndroid Build Coastguard Worker  * Open a UCalendar.
753*0e209d39SAndroid Build Coastguard Worker  * A UCalendar may be used to convert a millisecond value to a year,
754*0e209d39SAndroid Build Coastguard Worker  * month, and day.
755*0e209d39SAndroid Build Coastguard Worker  * <p>
756*0e209d39SAndroid Build Coastguard Worker  * Note: When unknown TimeZone ID is specified or if the TimeZone ID specified is "Etc/Unknown",
757*0e209d39SAndroid Build Coastguard Worker  * the UCalendar returned by the function is initialized with GMT zone with TimeZone ID
758*0e209d39SAndroid Build Coastguard Worker  * <code>UCAL_UNKNOWN_ZONE_ID</code> ("Etc/Unknown") without any errors/warnings.  If you want
759*0e209d39SAndroid Build Coastguard Worker  * to check if a TimeZone ID is valid prior to this function, use <code>ucal_getCanonicalTimeZoneID</code>.
760*0e209d39SAndroid Build Coastguard Worker  *
761*0e209d39SAndroid Build Coastguard Worker  * @param zoneID The desired TimeZone ID.  If 0, use the default time zone.
762*0e209d39SAndroid Build Coastguard Worker  * @param len The length of zoneID, or -1 if null-terminated.
763*0e209d39SAndroid Build Coastguard Worker  * @param locale The desired locale
764*0e209d39SAndroid Build Coastguard Worker  * @param type The type of UCalendar to open. This can be UCAL_GREGORIAN to open the Gregorian
765*0e209d39SAndroid Build Coastguard Worker  * calendar for the locale, or UCAL_DEFAULT to open the default calendar for the locale (the
766*0e209d39SAndroid Build Coastguard Worker  * default calendar may also be Gregorian). To open a specific non-Gregorian calendar for the
767*0e209d39SAndroid Build Coastguard Worker  * locale, use uloc_setKeywordValue to set the value of the calendar keyword for the locale
768*0e209d39SAndroid Build Coastguard Worker  * and then pass the locale to ucal_open with UCAL_DEFAULT as the type.
769*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
770*0e209d39SAndroid Build Coastguard Worker  * @return A pointer to a UCalendar, or 0 if an error occurred.
771*0e209d39SAndroid Build Coastguard Worker  * @see #UCAL_UNKNOWN_ZONE_ID
772*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
773*0e209d39SAndroid Build Coastguard Worker  */
774*0e209d39SAndroid Build Coastguard Worker U_CAPI UCalendar* U_EXPORT2
775*0e209d39SAndroid Build Coastguard Worker ucal_open(const UChar*   zoneID,
776*0e209d39SAndroid Build Coastguard Worker           int32_t        len,
777*0e209d39SAndroid Build Coastguard Worker           const char*    locale,
778*0e209d39SAndroid Build Coastguard Worker           UCalendarType  type,
779*0e209d39SAndroid Build Coastguard Worker           UErrorCode*    status);
780*0e209d39SAndroid Build Coastguard Worker 
781*0e209d39SAndroid Build Coastguard Worker /**
782*0e209d39SAndroid Build Coastguard Worker  * Close a UCalendar.
783*0e209d39SAndroid Build Coastguard Worker  * Once closed, a UCalendar may no longer be used.
784*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to close.
785*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
786*0e209d39SAndroid Build Coastguard Worker  */
787*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
788*0e209d39SAndroid Build Coastguard Worker ucal_close(UCalendar *cal);
789*0e209d39SAndroid Build Coastguard Worker 
790*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
791*0e209d39SAndroid Build Coastguard Worker 
792*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
793*0e209d39SAndroid Build Coastguard Worker 
794*0e209d39SAndroid Build Coastguard Worker /**
795*0e209d39SAndroid Build Coastguard Worker  * \class LocalUCalendarPointer
796*0e209d39SAndroid Build Coastguard Worker  * "Smart pointer" class, closes a UCalendar via ucal_close().
797*0e209d39SAndroid Build Coastguard Worker  * For most methods see the LocalPointerBase base class.
798*0e209d39SAndroid Build Coastguard Worker  *
799*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointerBase
800*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointer
801*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
802*0e209d39SAndroid Build Coastguard Worker  */
803*0e209d39SAndroid Build Coastguard Worker U_DEFINE_LOCAL_OPEN_POINTER(LocalUCalendarPointer, UCalendar, ucal_close);
804*0e209d39SAndroid Build Coastguard Worker 
805*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
806*0e209d39SAndroid Build Coastguard Worker 
807*0e209d39SAndroid Build Coastguard Worker #endif
808*0e209d39SAndroid Build Coastguard Worker 
809*0e209d39SAndroid Build Coastguard Worker /**
810*0e209d39SAndroid Build Coastguard Worker  * Open a copy of a UCalendar.
811*0e209d39SAndroid Build Coastguard Worker  * This function performs a deep copy.
812*0e209d39SAndroid Build Coastguard Worker  * @param cal The calendar to copy
813*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors.
814*0e209d39SAndroid Build Coastguard Worker  * @return A pointer to a UCalendar identical to cal.
815*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
816*0e209d39SAndroid Build Coastguard Worker  */
817*0e209d39SAndroid Build Coastguard Worker U_CAPI UCalendar* U_EXPORT2
818*0e209d39SAndroid Build Coastguard Worker ucal_clone(const UCalendar* cal,
819*0e209d39SAndroid Build Coastguard Worker            UErrorCode*      status);
820*0e209d39SAndroid Build Coastguard Worker 
821*0e209d39SAndroid Build Coastguard Worker /**
822*0e209d39SAndroid Build Coastguard Worker  * Set the TimeZone used by a UCalendar.
823*0e209d39SAndroid Build Coastguard Worker  * A UCalendar uses a timezone for converting from Greenwich time to local time.
824*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to set.
825*0e209d39SAndroid Build Coastguard Worker  * @param zoneID The desired TimeZone ID.  If 0, use the default time zone.
826*0e209d39SAndroid Build Coastguard Worker  * @param len The length of zoneID, or -1 if null-terminated.
827*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors.
828*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
829*0e209d39SAndroid Build Coastguard Worker  */
830*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
831*0e209d39SAndroid Build Coastguard Worker ucal_setTimeZone(UCalendar*    cal,
832*0e209d39SAndroid Build Coastguard Worker                  const UChar*  zoneID,
833*0e209d39SAndroid Build Coastguard Worker                  int32_t       len,
834*0e209d39SAndroid Build Coastguard Worker                  UErrorCode*   status);
835*0e209d39SAndroid Build Coastguard Worker 
836*0e209d39SAndroid Build Coastguard Worker /**
837*0e209d39SAndroid Build Coastguard Worker  * Get the ID of the UCalendar's time zone.
838*0e209d39SAndroid Build Coastguard Worker  *
839*0e209d39SAndroid Build Coastguard Worker  * @param cal           The UCalendar to query.
840*0e209d39SAndroid Build Coastguard Worker  * @param result        Receives the UCalendar's time zone ID.
841*0e209d39SAndroid Build Coastguard Worker  * @param resultLength  The maximum size of result.
842*0e209d39SAndroid Build Coastguard Worker  * @param status        Receives the status.
843*0e209d39SAndroid Build Coastguard Worker  * @return              The total buffer size needed; if greater than resultLength, the output was truncated.
844*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
845*0e209d39SAndroid Build Coastguard Worker  */
846*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
847*0e209d39SAndroid Build Coastguard Worker ucal_getTimeZoneID(const UCalendar *cal,
848*0e209d39SAndroid Build Coastguard Worker                    UChar *result,
849*0e209d39SAndroid Build Coastguard Worker                    int32_t resultLength,
850*0e209d39SAndroid Build Coastguard Worker                    UErrorCode *status);
851*0e209d39SAndroid Build Coastguard Worker 
852*0e209d39SAndroid Build Coastguard Worker /**
853*0e209d39SAndroid Build Coastguard Worker  * Possible formats for a UCalendar's display name
854*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
855*0e209d39SAndroid Build Coastguard Worker  */
856*0e209d39SAndroid Build Coastguard Worker enum UCalendarDisplayNameType {
857*0e209d39SAndroid Build Coastguard Worker   /** Standard display name */
858*0e209d39SAndroid Build Coastguard Worker   UCAL_STANDARD,
859*0e209d39SAndroid Build Coastguard Worker   /** Short standard display name */
860*0e209d39SAndroid Build Coastguard Worker   UCAL_SHORT_STANDARD,
861*0e209d39SAndroid Build Coastguard Worker   /** Daylight savings display name */
862*0e209d39SAndroid Build Coastguard Worker   UCAL_DST,
863*0e209d39SAndroid Build Coastguard Worker   /** Short daylight savings display name */
864*0e209d39SAndroid Build Coastguard Worker   UCAL_SHORT_DST
865*0e209d39SAndroid Build Coastguard Worker };
866*0e209d39SAndroid Build Coastguard Worker 
867*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
868*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarDisplayNameType UCalendarDisplayNameType;
869*0e209d39SAndroid Build Coastguard Worker 
870*0e209d39SAndroid Build Coastguard Worker /**
871*0e209d39SAndroid Build Coastguard Worker  * Get the display name for a UCalendar's TimeZone.
872*0e209d39SAndroid Build Coastguard Worker  * A display name is suitable for presentation to a user.
873*0e209d39SAndroid Build Coastguard Worker  * @param cal          The UCalendar to query.
874*0e209d39SAndroid Build Coastguard Worker  * @param type         The desired display name format; one of UCAL_STANDARD, UCAL_SHORT_STANDARD,
875*0e209d39SAndroid Build Coastguard Worker  *                     UCAL_DST, UCAL_SHORT_DST
876*0e209d39SAndroid Build Coastguard Worker  * @param locale       The desired locale for the display name.
877*0e209d39SAndroid Build Coastguard Worker  * @param result       A pointer to a buffer to receive the formatted number.
878*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
879*0e209d39SAndroid Build Coastguard Worker  * @param status       A pointer to an UErrorCode to receive any errors
880*0e209d39SAndroid Build Coastguard Worker  * @return             The total buffer size needed; if greater than resultLength, the output was truncated.
881*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
882*0e209d39SAndroid Build Coastguard Worker  */
883*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
884*0e209d39SAndroid Build Coastguard Worker ucal_getTimeZoneDisplayName(const UCalendar*          cal,
885*0e209d39SAndroid Build Coastguard Worker                             UCalendarDisplayNameType  type,
886*0e209d39SAndroid Build Coastguard Worker                             const char*               locale,
887*0e209d39SAndroid Build Coastguard Worker                             UChar*                    result,
888*0e209d39SAndroid Build Coastguard Worker                             int32_t                   resultLength,
889*0e209d39SAndroid Build Coastguard Worker                             UErrorCode*               status);
890*0e209d39SAndroid Build Coastguard Worker 
891*0e209d39SAndroid Build Coastguard Worker /**
892*0e209d39SAndroid Build Coastguard Worker  * Determine if a UCalendar is currently in daylight savings time.
893*0e209d39SAndroid Build Coastguard Worker  * Daylight savings time is not used in all parts of the world.
894*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
895*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
896*0e209d39SAndroid Build Coastguard Worker  * @return true if cal is currently in daylight savings time, false otherwise
897*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
898*0e209d39SAndroid Build Coastguard Worker  */
899*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
900*0e209d39SAndroid Build Coastguard Worker ucal_inDaylightTime(const UCalendar*  cal,
901*0e209d39SAndroid Build Coastguard Worker                     UErrorCode*       status );
902*0e209d39SAndroid Build Coastguard Worker 
903*0e209d39SAndroid Build Coastguard Worker /**
904*0e209d39SAndroid Build Coastguard Worker  * Sets the GregorianCalendar change date. This is the point when the switch from
905*0e209d39SAndroid Build Coastguard Worker  * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October
906*0e209d39SAndroid Build Coastguard Worker  * 15, 1582. Previous to this time and date will be Julian dates.
907*0e209d39SAndroid Build Coastguard Worker  *
908*0e209d39SAndroid Build Coastguard Worker  * This function works only for Gregorian calendars. If the UCalendar is not
909*0e209d39SAndroid Build Coastguard Worker  * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR
910*0e209d39SAndroid Build Coastguard Worker  * error code is set.
911*0e209d39SAndroid Build Coastguard Worker  *
912*0e209d39SAndroid Build Coastguard Worker  * @param cal        The calendar object.
913*0e209d39SAndroid Build Coastguard Worker  * @param date       The given Gregorian cutover date.
914*0e209d39SAndroid Build Coastguard Worker  * @param pErrorCode Pointer to a standard ICU error code. Its input value must
915*0e209d39SAndroid Build Coastguard Worker  *                   pass the U_SUCCESS() test, or else the function returns
916*0e209d39SAndroid Build Coastguard Worker  *                   immediately. Check for U_FAILURE() on output or use with
917*0e209d39SAndroid Build Coastguard Worker  *                   function chaining. (See User Guide for details.)
918*0e209d39SAndroid Build Coastguard Worker  *
919*0e209d39SAndroid Build Coastguard Worker  * @see GregorianCalendar::setGregorianChange
920*0e209d39SAndroid Build Coastguard Worker  * @see ucal_getGregorianChange
921*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 3.6
922*0e209d39SAndroid Build Coastguard Worker  */
923*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
924*0e209d39SAndroid Build Coastguard Worker ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode);
925*0e209d39SAndroid Build Coastguard Worker 
926*0e209d39SAndroid Build Coastguard Worker /**
927*0e209d39SAndroid Build Coastguard Worker  * Gets the Gregorian Calendar change date. This is the point when the switch from
928*0e209d39SAndroid Build Coastguard Worker  * Julian dates to Gregorian dates occurred. Default is 00:00:00 local time, October
929*0e209d39SAndroid Build Coastguard Worker  * 15, 1582. Previous to this time and date will be Julian dates.
930*0e209d39SAndroid Build Coastguard Worker  *
931*0e209d39SAndroid Build Coastguard Worker  * This function works only for Gregorian calendars. If the UCalendar is not
932*0e209d39SAndroid Build Coastguard Worker  * an instance of a Gregorian calendar, then a U_UNSUPPORTED_ERROR
933*0e209d39SAndroid Build Coastguard Worker  * error code is set.
934*0e209d39SAndroid Build Coastguard Worker  *
935*0e209d39SAndroid Build Coastguard Worker  * @param cal        The calendar object.
936*0e209d39SAndroid Build Coastguard Worker  * @param pErrorCode Pointer to a standard ICU error code. Its input value must
937*0e209d39SAndroid Build Coastguard Worker  *                   pass the U_SUCCESS() test, or else the function returns
938*0e209d39SAndroid Build Coastguard Worker  *                   immediately. Check for U_FAILURE() on output or use with
939*0e209d39SAndroid Build Coastguard Worker  *                   function chaining. (See User Guide for details.)
940*0e209d39SAndroid Build Coastguard Worker  * @return   The Gregorian cutover time for this calendar.
941*0e209d39SAndroid Build Coastguard Worker  *
942*0e209d39SAndroid Build Coastguard Worker  * @see GregorianCalendar::getGregorianChange
943*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setGregorianChange
944*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 3.6
945*0e209d39SAndroid Build Coastguard Worker  */
946*0e209d39SAndroid Build Coastguard Worker U_CAPI UDate U_EXPORT2
947*0e209d39SAndroid Build Coastguard Worker ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode);
948*0e209d39SAndroid Build Coastguard Worker 
949*0e209d39SAndroid Build Coastguard Worker /**
950*0e209d39SAndroid Build Coastguard Worker  * Types of UCalendar attributes
951*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
952*0e209d39SAndroid Build Coastguard Worker  */
953*0e209d39SAndroid Build Coastguard Worker enum UCalendarAttribute {
954*0e209d39SAndroid Build Coastguard Worker   /**
955*0e209d39SAndroid Build Coastguard Worker    * Lenient parsing
956*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.0
957*0e209d39SAndroid Build Coastguard Worker    */
958*0e209d39SAndroid Build Coastguard Worker   UCAL_LENIENT,
959*0e209d39SAndroid Build Coastguard Worker   /**
960*0e209d39SAndroid Build Coastguard Worker    * First day of week
961*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.0
962*0e209d39SAndroid Build Coastguard Worker    */
963*0e209d39SAndroid Build Coastguard Worker   UCAL_FIRST_DAY_OF_WEEK,
964*0e209d39SAndroid Build Coastguard Worker   /**
965*0e209d39SAndroid Build Coastguard Worker    * Minimum number of days in first week
966*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 2.0
967*0e209d39SAndroid Build Coastguard Worker    */
968*0e209d39SAndroid Build Coastguard Worker   UCAL_MINIMAL_DAYS_IN_FIRST_WEEK,
969*0e209d39SAndroid Build Coastguard Worker   /**
970*0e209d39SAndroid Build Coastguard Worker    * The behavior for handling wall time repeating multiple times
971*0e209d39SAndroid Build Coastguard Worker    * at negative time zone offset transitions
972*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 49
973*0e209d39SAndroid Build Coastguard Worker    */
974*0e209d39SAndroid Build Coastguard Worker   UCAL_REPEATED_WALL_TIME,
975*0e209d39SAndroid Build Coastguard Worker   /**
976*0e209d39SAndroid Build Coastguard Worker    * The behavior for handling skipped wall time at positive time
977*0e209d39SAndroid Build Coastguard Worker    * zone offset transitions.
978*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 49
979*0e209d39SAndroid Build Coastguard Worker    */
980*0e209d39SAndroid Build Coastguard Worker   UCAL_SKIPPED_WALL_TIME
981*0e209d39SAndroid Build Coastguard Worker };
982*0e209d39SAndroid Build Coastguard Worker 
983*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
984*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarAttribute UCalendarAttribute;
985*0e209d39SAndroid Build Coastguard Worker 
986*0e209d39SAndroid Build Coastguard Worker /**
987*0e209d39SAndroid Build Coastguard Worker  * Options for handling ambiguous wall time at time zone
988*0e209d39SAndroid Build Coastguard Worker  * offset transitions.
989*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 49
990*0e209d39SAndroid Build Coastguard Worker  */
991*0e209d39SAndroid Build Coastguard Worker enum UCalendarWallTimeOption {
992*0e209d39SAndroid Build Coastguard Worker     /**
993*0e209d39SAndroid Build Coastguard Worker      * An ambiguous wall time to be interpreted as the latest.
994*0e209d39SAndroid Build Coastguard Worker      * This option is valid for UCAL_REPEATED_WALL_TIME and
995*0e209d39SAndroid Build Coastguard Worker      * UCAL_SKIPPED_WALL_TIME.
996*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 49
997*0e209d39SAndroid Build Coastguard Worker      */
998*0e209d39SAndroid Build Coastguard Worker     UCAL_WALLTIME_LAST,
999*0e209d39SAndroid Build Coastguard Worker     /**
1000*0e209d39SAndroid Build Coastguard Worker      * An ambiguous wall time to be interpreted as the earliest.
1001*0e209d39SAndroid Build Coastguard Worker      * This option is valid for UCAL_REPEATED_WALL_TIME and
1002*0e209d39SAndroid Build Coastguard Worker      * UCAL_SKIPPED_WALL_TIME.
1003*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 49
1004*0e209d39SAndroid Build Coastguard Worker      */
1005*0e209d39SAndroid Build Coastguard Worker     UCAL_WALLTIME_FIRST,
1006*0e209d39SAndroid Build Coastguard Worker     /**
1007*0e209d39SAndroid Build Coastguard Worker      * An ambiguous wall time to be interpreted as the next valid
1008*0e209d39SAndroid Build Coastguard Worker      * wall time. This option is valid for UCAL_SKIPPED_WALL_TIME.
1009*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 49
1010*0e209d39SAndroid Build Coastguard Worker      */
1011*0e209d39SAndroid Build Coastguard Worker     UCAL_WALLTIME_NEXT_VALID
1012*0e209d39SAndroid Build Coastguard Worker };
1013*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 49 */
1014*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarWallTimeOption UCalendarWallTimeOption;
1015*0e209d39SAndroid Build Coastguard Worker 
1016*0e209d39SAndroid Build Coastguard Worker /**
1017*0e209d39SAndroid Build Coastguard Worker  * Get a numeric attribute associated with a UCalendar.
1018*0e209d39SAndroid Build Coastguard Worker  * Numeric attributes include the first day of the week, or the minimal numbers
1019*0e209d39SAndroid Build Coastguard Worker  * of days in the first week of the month.
1020*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1021*0e209d39SAndroid Build Coastguard Worker  * @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
1022*0e209d39SAndroid Build Coastguard Worker  * UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME or UCAL_SKIPPED_WALL_TIME
1023*0e209d39SAndroid Build Coastguard Worker  * @return The value of attr.
1024*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setAttribute
1025*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1026*0e209d39SAndroid Build Coastguard Worker  */
1027*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1028*0e209d39SAndroid Build Coastguard Worker ucal_getAttribute(const UCalendar*    cal,
1029*0e209d39SAndroid Build Coastguard Worker                   UCalendarAttribute  attr);
1030*0e209d39SAndroid Build Coastguard Worker 
1031*0e209d39SAndroid Build Coastguard Worker /**
1032*0e209d39SAndroid Build Coastguard Worker  * Set a numeric attribute associated with a UCalendar.
1033*0e209d39SAndroid Build Coastguard Worker  * Numeric attributes include the first day of the week, or the minimal numbers
1034*0e209d39SAndroid Build Coastguard Worker  * of days in the first week of the month.
1035*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to set.
1036*0e209d39SAndroid Build Coastguard Worker  * @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
1037*0e209d39SAndroid Build Coastguard Worker  * UCAL_MINIMAL_DAYS_IN_FIRST_WEEK, UCAL_REPEATED_WALL_TIME or UCAL_SKIPPED_WALL_TIME
1038*0e209d39SAndroid Build Coastguard Worker  * @param newValue The new value of attr.
1039*0e209d39SAndroid Build Coastguard Worker  * @see ucal_getAttribute
1040*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1041*0e209d39SAndroid Build Coastguard Worker  */
1042*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1043*0e209d39SAndroid Build Coastguard Worker ucal_setAttribute(UCalendar*          cal,
1044*0e209d39SAndroid Build Coastguard Worker                   UCalendarAttribute  attr,
1045*0e209d39SAndroid Build Coastguard Worker                   int32_t             newValue);
1046*0e209d39SAndroid Build Coastguard Worker 
1047*0e209d39SAndroid Build Coastguard Worker /**
1048*0e209d39SAndroid Build Coastguard Worker  * Get a locale for which calendars are available.
1049*0e209d39SAndroid Build Coastguard Worker  * A UCalendar in a locale returned by this function will contain the correct
1050*0e209d39SAndroid Build Coastguard Worker  * day and month names for the locale.
1051*0e209d39SAndroid Build Coastguard Worker  * @param localeIndex The index of the desired locale.
1052*0e209d39SAndroid Build Coastguard Worker  * @return A locale for which calendars are available, or 0 if none.
1053*0e209d39SAndroid Build Coastguard Worker  * @see ucal_countAvailable
1054*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1055*0e209d39SAndroid Build Coastguard Worker  */
1056*0e209d39SAndroid Build Coastguard Worker U_CAPI const char* U_EXPORT2
1057*0e209d39SAndroid Build Coastguard Worker ucal_getAvailable(int32_t localeIndex);
1058*0e209d39SAndroid Build Coastguard Worker 
1059*0e209d39SAndroid Build Coastguard Worker /**
1060*0e209d39SAndroid Build Coastguard Worker  * Determine how many locales have calendars available.
1061*0e209d39SAndroid Build Coastguard Worker  * This function is most useful as determining the loop ending condition for
1062*0e209d39SAndroid Build Coastguard Worker  * calls to \ref ucal_getAvailable.
1063*0e209d39SAndroid Build Coastguard Worker  * @return The number of locales for which calendars are available.
1064*0e209d39SAndroid Build Coastguard Worker  * @see ucal_getAvailable
1065*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1066*0e209d39SAndroid Build Coastguard Worker  */
1067*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1068*0e209d39SAndroid Build Coastguard Worker ucal_countAvailable(void);
1069*0e209d39SAndroid Build Coastguard Worker 
1070*0e209d39SAndroid Build Coastguard Worker /**
1071*0e209d39SAndroid Build Coastguard Worker  * Get a UCalendar's current time in millis.
1072*0e209d39SAndroid Build Coastguard Worker  * The time is represented as milliseconds from the epoch.
1073*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1074*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1075*0e209d39SAndroid Build Coastguard Worker  * @return The calendar's current time in millis.
1076*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setMillis
1077*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setDate
1078*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setDateTime
1079*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1080*0e209d39SAndroid Build Coastguard Worker  */
1081*0e209d39SAndroid Build Coastguard Worker U_CAPI UDate U_EXPORT2
1082*0e209d39SAndroid Build Coastguard Worker ucal_getMillis(const UCalendar*  cal,
1083*0e209d39SAndroid Build Coastguard Worker                UErrorCode*       status);
1084*0e209d39SAndroid Build Coastguard Worker 
1085*0e209d39SAndroid Build Coastguard Worker /**
1086*0e209d39SAndroid Build Coastguard Worker  * Set a UCalendar's current time in millis.
1087*0e209d39SAndroid Build Coastguard Worker  * The time is represented as milliseconds from the epoch.
1088*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to set.
1089*0e209d39SAndroid Build Coastguard Worker  * @param dateTime The desired date and time.
1090*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1091*0e209d39SAndroid Build Coastguard Worker  * @see ucal_getMillis
1092*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setDate
1093*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setDateTime
1094*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1095*0e209d39SAndroid Build Coastguard Worker  */
1096*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1097*0e209d39SAndroid Build Coastguard Worker ucal_setMillis(UCalendar*   cal,
1098*0e209d39SAndroid Build Coastguard Worker                UDate        dateTime,
1099*0e209d39SAndroid Build Coastguard Worker                UErrorCode*  status );
1100*0e209d39SAndroid Build Coastguard Worker 
1101*0e209d39SAndroid Build Coastguard Worker /**
1102*0e209d39SAndroid Build Coastguard Worker  * Set a UCalendar's current date.
1103*0e209d39SAndroid Build Coastguard Worker  * The date is represented as a series of 32-bit integers.
1104*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to set.
1105*0e209d39SAndroid Build Coastguard Worker  * @param year The desired year.
1106*0e209d39SAndroid Build Coastguard Worker  * @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
1107*0e209d39SAndroid Build Coastguard Worker  * UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
1108*0e209d39SAndroid Build Coastguard Worker  * @param date The desired day of the month.
1109*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1110*0e209d39SAndroid Build Coastguard Worker  * @see ucal_getMillis
1111*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setMillis
1112*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setDateTime
1113*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1114*0e209d39SAndroid Build Coastguard Worker  */
1115*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1116*0e209d39SAndroid Build Coastguard Worker ucal_setDate(UCalendar*   cal,
1117*0e209d39SAndroid Build Coastguard Worker              int32_t      year,
1118*0e209d39SAndroid Build Coastguard Worker              int32_t      month,
1119*0e209d39SAndroid Build Coastguard Worker              int32_t      date,
1120*0e209d39SAndroid Build Coastguard Worker              UErrorCode*  status);
1121*0e209d39SAndroid Build Coastguard Worker 
1122*0e209d39SAndroid Build Coastguard Worker /**
1123*0e209d39SAndroid Build Coastguard Worker  * Set a UCalendar's current date.
1124*0e209d39SAndroid Build Coastguard Worker  * The date is represented as a series of 32-bit integers.
1125*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to set.
1126*0e209d39SAndroid Build Coastguard Worker  * @param year The desired year.
1127*0e209d39SAndroid Build Coastguard Worker  * @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
1128*0e209d39SAndroid Build Coastguard Worker  * UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
1129*0e209d39SAndroid Build Coastguard Worker  * @param date The desired day of the month.
1130*0e209d39SAndroid Build Coastguard Worker  * @param hour The desired hour of day.
1131*0e209d39SAndroid Build Coastguard Worker  * @param minute The desired minute.
1132*0e209d39SAndroid Build Coastguard Worker  * @param second The desirec second.
1133*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1134*0e209d39SAndroid Build Coastguard Worker  * @see ucal_getMillis
1135*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setMillis
1136*0e209d39SAndroid Build Coastguard Worker  * @see ucal_setDate
1137*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1138*0e209d39SAndroid Build Coastguard Worker  */
1139*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1140*0e209d39SAndroid Build Coastguard Worker ucal_setDateTime(UCalendar*   cal,
1141*0e209d39SAndroid Build Coastguard Worker                  int32_t      year,
1142*0e209d39SAndroid Build Coastguard Worker                  int32_t      month,
1143*0e209d39SAndroid Build Coastguard Worker                  int32_t      date,
1144*0e209d39SAndroid Build Coastguard Worker                  int32_t      hour,
1145*0e209d39SAndroid Build Coastguard Worker                  int32_t      minute,
1146*0e209d39SAndroid Build Coastguard Worker                  int32_t      second,
1147*0e209d39SAndroid Build Coastguard Worker                  UErrorCode*  status);
1148*0e209d39SAndroid Build Coastguard Worker 
1149*0e209d39SAndroid Build Coastguard Worker /**
1150*0e209d39SAndroid Build Coastguard Worker  * Returns true if two UCalendars are equivalent.  Equivalent
1151*0e209d39SAndroid Build Coastguard Worker  * UCalendars will behave identically, but they may be set to
1152*0e209d39SAndroid Build Coastguard Worker  * different times.
1153*0e209d39SAndroid Build Coastguard Worker  * @param cal1 The first of the UCalendars to compare.
1154*0e209d39SAndroid Build Coastguard Worker  * @param cal2 The second of the UCalendars to compare.
1155*0e209d39SAndroid Build Coastguard Worker  * @return true if cal1 and cal2 are equivalent, false otherwise.
1156*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1157*0e209d39SAndroid Build Coastguard Worker  */
1158*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
1159*0e209d39SAndroid Build Coastguard Worker ucal_equivalentTo(const UCalendar*  cal1,
1160*0e209d39SAndroid Build Coastguard Worker                   const UCalendar*  cal2);
1161*0e209d39SAndroid Build Coastguard Worker 
1162*0e209d39SAndroid Build Coastguard Worker /**
1163*0e209d39SAndroid Build Coastguard Worker  * Add a specified signed amount to a particular field in a UCalendar.
1164*0e209d39SAndroid Build Coastguard Worker  * This can modify more significant fields in the calendar.
1165*0e209d39SAndroid Build Coastguard Worker  * Adding a positive value always means moving forward in time, so for the Gregorian calendar,
1166*0e209d39SAndroid Build Coastguard Worker  * starting with 100 BC and adding +1 to year results in 99 BC (even though this actually reduces
1167*0e209d39SAndroid Build Coastguard Worker  * the numeric value of the field itself).
1168*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to which to add.
1169*0e209d39SAndroid Build Coastguard Worker  * @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1170*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1171*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1172*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1173*0e209d39SAndroid Build Coastguard Worker  * @param amount The signed amount to add to field. If the amount causes the value
1174*0e209d39SAndroid Build Coastguard Worker  * to exceed to maximum or minimum values for that field, other fields are modified
1175*0e209d39SAndroid Build Coastguard Worker  * to preserve the magnitude of the change.
1176*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1177*0e209d39SAndroid Build Coastguard Worker  * @see ucal_roll
1178*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1179*0e209d39SAndroid Build Coastguard Worker  */
1180*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1181*0e209d39SAndroid Build Coastguard Worker ucal_add(UCalendar*           cal,
1182*0e209d39SAndroid Build Coastguard Worker          UCalendarDateFields  field,
1183*0e209d39SAndroid Build Coastguard Worker          int32_t              amount,
1184*0e209d39SAndroid Build Coastguard Worker          UErrorCode*          status);
1185*0e209d39SAndroid Build Coastguard Worker 
1186*0e209d39SAndroid Build Coastguard Worker /**
1187*0e209d39SAndroid Build Coastguard Worker  * Add a specified signed amount to a particular field in a UCalendar.
1188*0e209d39SAndroid Build Coastguard Worker  * This will not modify more significant fields in the calendar.
1189*0e209d39SAndroid Build Coastguard Worker  * Rolling by a positive value always means moving forward in time (unless the limit of the
1190*0e209d39SAndroid Build Coastguard Worker  * field is reached, in which case it may pin or wrap), so for Gregorian calendar,
1191*0e209d39SAndroid Build Coastguard Worker  * starting with 100 BC and rolling the year by +1 results in 99 BC.
1192*0e209d39SAndroid Build Coastguard Worker  * When eras have a definite beginning and end (as in the Chinese calendar, or as in most eras in the
1193*0e209d39SAndroid Build Coastguard Worker  * Japanese calendar) then rolling the year past either limit of the era will cause the year to wrap around.
1194*0e209d39SAndroid Build Coastguard Worker  * When eras only have a limit at one end, then attempting to roll the year past that limit will result in
1195*0e209d39SAndroid Build Coastguard Worker  * pinning the year at that limit. Note that for most calendars in which era 0 years move forward in time
1196*0e209d39SAndroid Build Coastguard Worker  * (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to result in negative years for
1197*0e209d39SAndroid Build Coastguard Worker  * era 0 (that is the only way to represent years before the calendar epoch).
1198*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to which to add.
1199*0e209d39SAndroid Build Coastguard Worker  * @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1200*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1201*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1202*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1203*0e209d39SAndroid Build Coastguard Worker  * @param amount The signed amount to add to field. If the amount causes the value
1204*0e209d39SAndroid Build Coastguard Worker  * to exceed to maximum or minimum values for that field, the field is pinned to a permissible
1205*0e209d39SAndroid Build Coastguard Worker  * value.
1206*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1207*0e209d39SAndroid Build Coastguard Worker  * @see ucal_add
1208*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1209*0e209d39SAndroid Build Coastguard Worker  */
1210*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1211*0e209d39SAndroid Build Coastguard Worker ucal_roll(UCalendar*           cal,
1212*0e209d39SAndroid Build Coastguard Worker           UCalendarDateFields  field,
1213*0e209d39SAndroid Build Coastguard Worker           int32_t              amount,
1214*0e209d39SAndroid Build Coastguard Worker           UErrorCode*          status);
1215*0e209d39SAndroid Build Coastguard Worker 
1216*0e209d39SAndroid Build Coastguard Worker /**
1217*0e209d39SAndroid Build Coastguard Worker  * Get the current value of a field from a UCalendar.
1218*0e209d39SAndroid Build Coastguard Worker  * All fields are represented as 32-bit integers.
1219*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1220*0e209d39SAndroid Build Coastguard Worker  * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1221*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1222*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1223*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1224*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1225*0e209d39SAndroid Build Coastguard Worker  * @return The value of the desired field.
1226*0e209d39SAndroid Build Coastguard Worker  * @see ucal_set
1227*0e209d39SAndroid Build Coastguard Worker  * @see ucal_isSet
1228*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clearField
1229*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clear
1230*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1231*0e209d39SAndroid Build Coastguard Worker  */
1232*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1233*0e209d39SAndroid Build Coastguard Worker ucal_get(const UCalendar*     cal,
1234*0e209d39SAndroid Build Coastguard Worker          UCalendarDateFields  field,
1235*0e209d39SAndroid Build Coastguard Worker          UErrorCode*          status );
1236*0e209d39SAndroid Build Coastguard Worker 
1237*0e209d39SAndroid Build Coastguard Worker /**
1238*0e209d39SAndroid Build Coastguard Worker  * Set the value of a field in a UCalendar.
1239*0e209d39SAndroid Build Coastguard Worker  * All fields are represented as 32-bit integers.
1240*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to set.
1241*0e209d39SAndroid Build Coastguard Worker  * @param field The field to set; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1242*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1243*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1244*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1245*0e209d39SAndroid Build Coastguard Worker  * @param value The desired value of field.
1246*0e209d39SAndroid Build Coastguard Worker  * @see ucal_get
1247*0e209d39SAndroid Build Coastguard Worker  * @see ucal_isSet
1248*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clearField
1249*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clear
1250*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1251*0e209d39SAndroid Build Coastguard Worker  */
1252*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1253*0e209d39SAndroid Build Coastguard Worker ucal_set(UCalendar*           cal,
1254*0e209d39SAndroid Build Coastguard Worker          UCalendarDateFields  field,
1255*0e209d39SAndroid Build Coastguard Worker          int32_t              value);
1256*0e209d39SAndroid Build Coastguard Worker 
1257*0e209d39SAndroid Build Coastguard Worker /**
1258*0e209d39SAndroid Build Coastguard Worker  * Determine if a field in a UCalendar is set.
1259*0e209d39SAndroid Build Coastguard Worker  * All fields are represented as 32-bit integers.
1260*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1261*0e209d39SAndroid Build Coastguard Worker  * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1262*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1263*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1264*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1265*0e209d39SAndroid Build Coastguard Worker  * @return true if field is set, false otherwise.
1266*0e209d39SAndroid Build Coastguard Worker  * @see ucal_get
1267*0e209d39SAndroid Build Coastguard Worker  * @see ucal_set
1268*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clearField
1269*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clear
1270*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1271*0e209d39SAndroid Build Coastguard Worker  */
1272*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
1273*0e209d39SAndroid Build Coastguard Worker ucal_isSet(const UCalendar*     cal,
1274*0e209d39SAndroid Build Coastguard Worker            UCalendarDateFields  field);
1275*0e209d39SAndroid Build Coastguard Worker 
1276*0e209d39SAndroid Build Coastguard Worker /**
1277*0e209d39SAndroid Build Coastguard Worker  * Clear a field in a UCalendar.
1278*0e209d39SAndroid Build Coastguard Worker  * All fields are represented as 32-bit integers.
1279*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar containing the field to clear.
1280*0e209d39SAndroid Build Coastguard Worker  * @param field The field to clear; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1281*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1282*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1283*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1284*0e209d39SAndroid Build Coastguard Worker  * @see ucal_get
1285*0e209d39SAndroid Build Coastguard Worker  * @see ucal_set
1286*0e209d39SAndroid Build Coastguard Worker  * @see ucal_isSet
1287*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clear
1288*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1289*0e209d39SAndroid Build Coastguard Worker  */
1290*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1291*0e209d39SAndroid Build Coastguard Worker ucal_clearField(UCalendar*           cal,
1292*0e209d39SAndroid Build Coastguard Worker                 UCalendarDateFields  field);
1293*0e209d39SAndroid Build Coastguard Worker 
1294*0e209d39SAndroid Build Coastguard Worker /**
1295*0e209d39SAndroid Build Coastguard Worker  * Clear all fields in a UCalendar.
1296*0e209d39SAndroid Build Coastguard Worker  * All fields are represented as 32-bit integers.
1297*0e209d39SAndroid Build Coastguard Worker  * @param calendar The UCalendar to clear.
1298*0e209d39SAndroid Build Coastguard Worker  * @see ucal_get
1299*0e209d39SAndroid Build Coastguard Worker  * @see ucal_set
1300*0e209d39SAndroid Build Coastguard Worker  * @see ucal_isSet
1301*0e209d39SAndroid Build Coastguard Worker  * @see ucal_clearField
1302*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1303*0e209d39SAndroid Build Coastguard Worker  */
1304*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1305*0e209d39SAndroid Build Coastguard Worker ucal_clear(UCalendar* calendar);
1306*0e209d39SAndroid Build Coastguard Worker 
1307*0e209d39SAndroid Build Coastguard Worker /**
1308*0e209d39SAndroid Build Coastguard Worker  * Possible limit values for a UCalendar
1309*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1310*0e209d39SAndroid Build Coastguard Worker  */
1311*0e209d39SAndroid Build Coastguard Worker enum UCalendarLimitType {
1312*0e209d39SAndroid Build Coastguard Worker   /** Minimum value */
1313*0e209d39SAndroid Build Coastguard Worker   UCAL_MINIMUM,
1314*0e209d39SAndroid Build Coastguard Worker   /** Maximum value */
1315*0e209d39SAndroid Build Coastguard Worker   UCAL_MAXIMUM,
1316*0e209d39SAndroid Build Coastguard Worker   /** Greatest minimum value */
1317*0e209d39SAndroid Build Coastguard Worker   UCAL_GREATEST_MINIMUM,
1318*0e209d39SAndroid Build Coastguard Worker   /** Least maximum value */
1319*0e209d39SAndroid Build Coastguard Worker   UCAL_LEAST_MAXIMUM,
1320*0e209d39SAndroid Build Coastguard Worker   /** Actual minimum value */
1321*0e209d39SAndroid Build Coastguard Worker   UCAL_ACTUAL_MINIMUM,
1322*0e209d39SAndroid Build Coastguard Worker   /** Actual maximum value */
1323*0e209d39SAndroid Build Coastguard Worker   UCAL_ACTUAL_MAXIMUM
1324*0e209d39SAndroid Build Coastguard Worker };
1325*0e209d39SAndroid Build Coastguard Worker 
1326*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 2.0 */
1327*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarLimitType UCalendarLimitType;
1328*0e209d39SAndroid Build Coastguard Worker 
1329*0e209d39SAndroid Build Coastguard Worker /**
1330*0e209d39SAndroid Build Coastguard Worker  * Determine a limit for a field in a UCalendar.
1331*0e209d39SAndroid Build Coastguard Worker  * A limit is a maximum or minimum value for a field.
1332*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1333*0e209d39SAndroid Build Coastguard Worker  * @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1334*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1335*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1336*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1337*0e209d39SAndroid Build Coastguard Worker  * @param type The desired critical point; one of UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM,
1338*0e209d39SAndroid Build Coastguard Worker  * UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM
1339*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors.
1340*0e209d39SAndroid Build Coastguard Worker  * @return The requested value.
1341*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1342*0e209d39SAndroid Build Coastguard Worker  */
1343*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1344*0e209d39SAndroid Build Coastguard Worker ucal_getLimit(const UCalendar*     cal,
1345*0e209d39SAndroid Build Coastguard Worker               UCalendarDateFields  field,
1346*0e209d39SAndroid Build Coastguard Worker               UCalendarLimitType   type,
1347*0e209d39SAndroid Build Coastguard Worker               UErrorCode*          status);
1348*0e209d39SAndroid Build Coastguard Worker 
1349*0e209d39SAndroid Build Coastguard Worker /** Get the locale for this calendar object. You can choose between valid and actual locale.
1350*0e209d39SAndroid Build Coastguard Worker  *  @param cal The calendar object
1351*0e209d39SAndroid Build Coastguard Worker  *  @param type type of the locale we're looking for (valid or actual)
1352*0e209d39SAndroid Build Coastguard Worker  *  @param status error code for the operation
1353*0e209d39SAndroid Build Coastguard Worker  *  @return the locale name
1354*0e209d39SAndroid Build Coastguard Worker  *  @stable ICU 2.8
1355*0e209d39SAndroid Build Coastguard Worker  */
1356*0e209d39SAndroid Build Coastguard Worker U_CAPI const char * U_EXPORT2
1357*0e209d39SAndroid Build Coastguard Worker ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status);
1358*0e209d39SAndroid Build Coastguard Worker 
1359*0e209d39SAndroid Build Coastguard Worker /**
1360*0e209d39SAndroid Build Coastguard Worker  * Returns the timezone data version currently used by ICU.
1361*0e209d39SAndroid Build Coastguard Worker  * @param status error code for the operation
1362*0e209d39SAndroid Build Coastguard Worker  * @return the version string, such as "2007f"
1363*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 3.8
1364*0e209d39SAndroid Build Coastguard Worker  */
1365*0e209d39SAndroid Build Coastguard Worker U_CAPI const char * U_EXPORT2
1366*0e209d39SAndroid Build Coastguard Worker ucal_getTZDataVersion(UErrorCode* status);
1367*0e209d39SAndroid Build Coastguard Worker 
1368*0e209d39SAndroid Build Coastguard Worker /**
1369*0e209d39SAndroid Build Coastguard Worker  * Returns the canonical system timezone ID or the normalized
1370*0e209d39SAndroid Build Coastguard Worker  * custom time zone ID for the given time zone ID.
1371*0e209d39SAndroid Build Coastguard Worker  * @param id        The input timezone ID to be canonicalized.
1372*0e209d39SAndroid Build Coastguard Worker  * @param len       The length of id, or -1 if null-terminated.
1373*0e209d39SAndroid Build Coastguard Worker  * @param result    The buffer receives the canonical system timezone ID
1374*0e209d39SAndroid Build Coastguard Worker  *                  or the custom timezone ID in normalized format.
1375*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity    The capacity of the result buffer.
1376*0e209d39SAndroid Build Coastguard Worker  * @param isSystemID        Receives if the given ID is a known system
1377*0e209d39SAndroid Build Coastguard Worker      *                      timezone ID.
1378*0e209d39SAndroid Build Coastguard Worker  * @param status    Receives the status.  When the given timezone ID
1379*0e209d39SAndroid Build Coastguard Worker  *                  is neither a known system time zone ID nor a
1380*0e209d39SAndroid Build Coastguard Worker  *                  valid custom timezone ID, U_ILLEGAL_ARGUMENT_ERROR
1381*0e209d39SAndroid Build Coastguard Worker  *                  is set.
1382*0e209d39SAndroid Build Coastguard Worker  * @return          The result string length, not including the terminating
1383*0e209d39SAndroid Build Coastguard Worker  *                  null.
1384*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
1385*0e209d39SAndroid Build Coastguard Worker  */
1386*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1387*0e209d39SAndroid Build Coastguard Worker ucal_getCanonicalTimeZoneID(const UChar* id, int32_t len,
1388*0e209d39SAndroid Build Coastguard Worker                             UChar* result, int32_t resultCapacity, UBool *isSystemID, UErrorCode* status);
1389*0e209d39SAndroid Build Coastguard Worker 
1390*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DRAFT_API
1391*0e209d39SAndroid Build Coastguard Worker /**
1392*0e209d39SAndroid Build Coastguard Worker  * Returns the preferred time zone ID in the IANA time zone database for the given time zone ID.
1393*0e209d39SAndroid Build Coastguard Worker  * There are two types of preferred IDs. The first type is the one defined in zone.tab file,
1394*0e209d39SAndroid Build Coastguard Worker  * such as "America/Los_Angeles". The second types is the one defined for zones not associated
1395*0e209d39SAndroid Build Coastguard Worker  * with a specific region, but not defined with "Link" syntax such as "Etc/GMT+10".
1396*0e209d39SAndroid Build Coastguard Worker  *
1397*0e209d39SAndroid Build Coastguard Worker  * <p>Note: For most of valid time zone IDs, this method returns an ID same as ucal_getCanonicalTimeZoneID().
1398*0e209d39SAndroid Build Coastguard Worker  * ucal_getCanonicalTimeZoneID() is based on canonical time zone IDs defined in Unicode CLDR.
1399*0e209d39SAndroid Build Coastguard Worker  * These canonical time zone IDs in CLDR were based on very old version of the time zone database.
1400*0e209d39SAndroid Build Coastguard Worker  * In the IANA time zone database, some IDs were updated since then. This API returns a newer
1401*0e209d39SAndroid Build Coastguard Worker  * time zone ID. For example, CLDR defines "Asia/Calcutta" as the canonical time zone ID. This
1402*0e209d39SAndroid Build Coastguard Worker  * method returns "Asia/Kolkata" instead.
1403*0e209d39SAndroid Build Coastguard Worker  * <p> "Etc/Unknown" is a special time zone ID defined by CLDR. There are no corresponding zones
1404*0e209d39SAndroid Build Coastguard Worker  * in the IANA time zone database. Therefore, this API returns U_ILLEGAL_ARGUMENT_ERROR when the
1405*0e209d39SAndroid Build Coastguard Worker  * input ID is "Etc/Unknown".
1406*0e209d39SAndroid Build Coastguard Worker  *
1407*0e209d39SAndroid Build Coastguard Worker  * @param id        The input time zone ID.
1408*0e209d39SAndroid Build Coastguard Worker  * @param len       The length of the input time zone ID.
1409*0e209d39SAndroid Build Coastguard Worker  * @param result    The buffer receives the preferred time zone ID in the IANA time zone database.
1410*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity  The capacity of the result buffer.
1411*0e209d39SAndroid Build Coastguard Worker  * @param status    Receives the status.  When the given time zone ID is not a known system time zone
1412*0e209d39SAndroid Build Coastguard Worker  *                  ID, U_ILLEGAL_ARGUMENT_ERROR is set.
1413*0e209d39SAndroid Build Coastguard Worker  * @return          The result string length, not including the terminating null.
1414*0e209d39SAndroid Build Coastguard Worker  * @draft ICU 74
1415*0e209d39SAndroid Build Coastguard Worker  */
1416*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1417*0e209d39SAndroid Build Coastguard Worker ucal_getIanaTimeZoneID(const UChar* id, int32_t len,
1418*0e209d39SAndroid Build Coastguard Worker                         UChar* result, int32_t resultCapacity, UErrorCode* status);
1419*0e209d39SAndroid Build Coastguard Worker #endif // U_HIDE_DRAFT_API
1420*0e209d39SAndroid Build Coastguard Worker 
1421*0e209d39SAndroid Build Coastguard Worker /**
1422*0e209d39SAndroid Build Coastguard Worker  * Get the resource keyword value string designating the calendar type for the UCalendar.
1423*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1424*0e209d39SAndroid Build Coastguard Worker  * @param status The error code for the operation.
1425*0e209d39SAndroid Build Coastguard Worker  * @return The resource keyword value string.
1426*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
1427*0e209d39SAndroid Build Coastguard Worker  */
1428*0e209d39SAndroid Build Coastguard Worker U_CAPI const char * U_EXPORT2
1429*0e209d39SAndroid Build Coastguard Worker ucal_getType(const UCalendar *cal, UErrorCode* status);
1430*0e209d39SAndroid Build Coastguard Worker 
1431*0e209d39SAndroid Build Coastguard Worker /**
1432*0e209d39SAndroid Build Coastguard Worker  * Given a key and a locale, returns an array of string values in a preferred
1433*0e209d39SAndroid Build Coastguard Worker  * order that would make a difference. These are all and only those values where
1434*0e209d39SAndroid Build Coastguard Worker  * the open (creation) of the service with the locale formed from the input locale
1435*0e209d39SAndroid Build Coastguard Worker  * plus input keyword and that value has different behavior than creation with the
1436*0e209d39SAndroid Build Coastguard Worker  * input locale alone.
1437*0e209d39SAndroid Build Coastguard Worker  * @param key           one of the keys supported by this service.  For now, only
1438*0e209d39SAndroid Build Coastguard Worker  *                      "calendar" is supported.
1439*0e209d39SAndroid Build Coastguard Worker  * @param locale        the locale
1440*0e209d39SAndroid Build Coastguard Worker  * @param commonlyUsed  if set to true it will return only commonly used values
1441*0e209d39SAndroid Build Coastguard Worker  *                      with the given locale in preferred order.  Otherwise,
1442*0e209d39SAndroid Build Coastguard Worker  *                      it will return all the available values for the locale.
1443*0e209d39SAndroid Build Coastguard Worker  * @param status error status
1444*0e209d39SAndroid Build Coastguard Worker  * @return a string enumeration over keyword values for the given key and the locale.
1445*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.2
1446*0e209d39SAndroid Build Coastguard Worker  */
1447*0e209d39SAndroid Build Coastguard Worker U_CAPI UEnumeration* U_EXPORT2
1448*0e209d39SAndroid Build Coastguard Worker ucal_getKeywordValuesForLocale(const char* key,
1449*0e209d39SAndroid Build Coastguard Worker                                const char* locale,
1450*0e209d39SAndroid Build Coastguard Worker                                UBool commonlyUsed,
1451*0e209d39SAndroid Build Coastguard Worker                                UErrorCode* status);
1452*0e209d39SAndroid Build Coastguard Worker 
1453*0e209d39SAndroid Build Coastguard Worker 
1454*0e209d39SAndroid Build Coastguard Worker /** Weekday types, as returned by ucal_getDayOfWeekType().
1455*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
1456*0e209d39SAndroid Build Coastguard Worker  */
1457*0e209d39SAndroid Build Coastguard Worker enum UCalendarWeekdayType {
1458*0e209d39SAndroid Build Coastguard Worker   /**
1459*0e209d39SAndroid Build Coastguard Worker    * Designates a full weekday (no part of the day is included in the weekend).
1460*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 4.4
1461*0e209d39SAndroid Build Coastguard Worker    */
1462*0e209d39SAndroid Build Coastguard Worker   UCAL_WEEKDAY,
1463*0e209d39SAndroid Build Coastguard Worker   /**
1464*0e209d39SAndroid Build Coastguard Worker    * Designates a full weekend day (the entire day is included in the weekend).
1465*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 4.4
1466*0e209d39SAndroid Build Coastguard Worker    */
1467*0e209d39SAndroid Build Coastguard Worker   UCAL_WEEKEND,
1468*0e209d39SAndroid Build Coastguard Worker   /**
1469*0e209d39SAndroid Build Coastguard Worker    * Designates a day that starts as a weekday and transitions to the weekend.
1470*0e209d39SAndroid Build Coastguard Worker    * Call ucal_getWeekendTransition() to get the time of transition.
1471*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 4.4
1472*0e209d39SAndroid Build Coastguard Worker    */
1473*0e209d39SAndroid Build Coastguard Worker   UCAL_WEEKEND_ONSET,
1474*0e209d39SAndroid Build Coastguard Worker   /**
1475*0e209d39SAndroid Build Coastguard Worker    * Designates a day that starts as the weekend and transitions to a weekday.
1476*0e209d39SAndroid Build Coastguard Worker    * Call ucal_getWeekendTransition() to get the time of transition.
1477*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 4.4
1478*0e209d39SAndroid Build Coastguard Worker    */
1479*0e209d39SAndroid Build Coastguard Worker   UCAL_WEEKEND_CEASE
1480*0e209d39SAndroid Build Coastguard Worker };
1481*0e209d39SAndroid Build Coastguard Worker 
1482*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 4.4 */
1483*0e209d39SAndroid Build Coastguard Worker typedef enum UCalendarWeekdayType UCalendarWeekdayType;
1484*0e209d39SAndroid Build Coastguard Worker 
1485*0e209d39SAndroid Build Coastguard Worker /**
1486*0e209d39SAndroid Build Coastguard Worker  * Returns whether the given day of the week is a weekday, a weekend day,
1487*0e209d39SAndroid Build Coastguard Worker  * or a day that transitions from one to the other, for the locale and
1488*0e209d39SAndroid Build Coastguard Worker  * calendar system associated with this UCalendar (the locale's region is
1489*0e209d39SAndroid Build Coastguard Worker  * often the most determinant factor). If a transition occurs at midnight,
1490*0e209d39SAndroid Build Coastguard Worker  * then the days before and after the transition will have the
1491*0e209d39SAndroid Build Coastguard Worker  * type UCAL_WEEKDAY or UCAL_WEEKEND. If a transition occurs at a time
1492*0e209d39SAndroid Build Coastguard Worker  * other than midnight, then the day of the transition will have
1493*0e209d39SAndroid Build Coastguard Worker  * the type UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE. In this case, the
1494*0e209d39SAndroid Build Coastguard Worker  * function ucal_getWeekendTransition() will return the point of
1495*0e209d39SAndroid Build Coastguard Worker  * transition.
1496*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1497*0e209d39SAndroid Build Coastguard Worker  * @param dayOfWeek The day of the week whose type is desired (UCAL_SUNDAY..UCAL_SATURDAY).
1498*0e209d39SAndroid Build Coastguard Worker  * @param status The error code for the operation.
1499*0e209d39SAndroid Build Coastguard Worker  * @return The UCalendarWeekdayType for the day of the week.
1500*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
1501*0e209d39SAndroid Build Coastguard Worker  */
1502*0e209d39SAndroid Build Coastguard Worker U_CAPI UCalendarWeekdayType U_EXPORT2
1503*0e209d39SAndroid Build Coastguard Worker ucal_getDayOfWeekType(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode* status);
1504*0e209d39SAndroid Build Coastguard Worker 
1505*0e209d39SAndroid Build Coastguard Worker /**
1506*0e209d39SAndroid Build Coastguard Worker  * Returns the time during the day at which the weekend begins or ends in
1507*0e209d39SAndroid Build Coastguard Worker  * this calendar system.  If ucal_getDayOfWeekType() returns UCAL_WEEKEND_ONSET
1508*0e209d39SAndroid Build Coastguard Worker  * for the specified dayOfWeek, return the time at which the weekend begins.
1509*0e209d39SAndroid Build Coastguard Worker  * If ucal_getDayOfWeekType() returns UCAL_WEEKEND_CEASE for the specified dayOfWeek,
1510*0e209d39SAndroid Build Coastguard Worker  * return the time at which the weekend ends. If ucal_getDayOfWeekType() returns
1511*0e209d39SAndroid Build Coastguard Worker  * some other UCalendarWeekdayType for the specified dayOfWeek, is it an error condition
1512*0e209d39SAndroid Build Coastguard Worker  * (U_ILLEGAL_ARGUMENT_ERROR).
1513*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1514*0e209d39SAndroid Build Coastguard Worker  * @param dayOfWeek The day of the week for which the weekend transition time is
1515*0e209d39SAndroid Build Coastguard Worker  * desired (UCAL_SUNDAY..UCAL_SATURDAY).
1516*0e209d39SAndroid Build Coastguard Worker  * @param status The error code for the operation.
1517*0e209d39SAndroid Build Coastguard Worker  * @return The milliseconds after midnight at which the weekend begins or ends.
1518*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
1519*0e209d39SAndroid Build Coastguard Worker  */
1520*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1521*0e209d39SAndroid Build Coastguard Worker ucal_getWeekendTransition(const UCalendar *cal, UCalendarDaysOfWeek dayOfWeek, UErrorCode *status);
1522*0e209d39SAndroid Build Coastguard Worker 
1523*0e209d39SAndroid Build Coastguard Worker /**
1524*0e209d39SAndroid Build Coastguard Worker  * Returns true if the given UDate is in the weekend in
1525*0e209d39SAndroid Build Coastguard Worker  * this calendar system.
1526*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to query.
1527*0e209d39SAndroid Build Coastguard Worker  * @param date The UDate in question.
1528*0e209d39SAndroid Build Coastguard Worker  * @param status The error code for the operation.
1529*0e209d39SAndroid Build Coastguard Worker  * @return true if the given UDate is in the weekend in
1530*0e209d39SAndroid Build Coastguard Worker  * this calendar system, false otherwise.
1531*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
1532*0e209d39SAndroid Build Coastguard Worker  */
1533*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
1534*0e209d39SAndroid Build Coastguard Worker ucal_isWeekend(const UCalendar *cal, UDate date, UErrorCode *status);
1535*0e209d39SAndroid Build Coastguard Worker 
1536*0e209d39SAndroid Build Coastguard Worker /**
1537*0e209d39SAndroid Build Coastguard Worker  * Return the difference between the target time and the time this calendar object is currently set to.
1538*0e209d39SAndroid Build Coastguard Worker  * If the target time is after the current calendar setting, the the returned value will be positive.
1539*0e209d39SAndroid Build Coastguard Worker  * The field parameter specifies the units of the return value. For example, if field is UCAL_MONTH
1540*0e209d39SAndroid Build Coastguard Worker  * and ucal_getFieldDifference returns 3, then the target time is 3 to less than 4 months after the
1541*0e209d39SAndroid Build Coastguard Worker  * current calendar setting.
1542*0e209d39SAndroid Build Coastguard Worker  *
1543*0e209d39SAndroid Build Coastguard Worker  * As a side effect of this call, this calendar is advanced toward target by the given amount. That is,
1544*0e209d39SAndroid Build Coastguard Worker  * calling this function has the side effect of calling ucal_add on this calendar with the specified
1545*0e209d39SAndroid Build Coastguard Worker  * field and an amount equal to the return value from this function.
1546*0e209d39SAndroid Build Coastguard Worker  *
1547*0e209d39SAndroid Build Coastguard Worker  * A typical way of using this function is to call it first with the largest field of interest, then
1548*0e209d39SAndroid Build Coastguard Worker  * with progressively smaller fields.
1549*0e209d39SAndroid Build Coastguard Worker  *
1550*0e209d39SAndroid Build Coastguard Worker  * @param cal The UCalendar to compare and update.
1551*0e209d39SAndroid Build Coastguard Worker  * @param target The target date to compare to the current calendar setting.
1552*0e209d39SAndroid Build Coastguard Worker  * @param field The field to compare; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
1553*0e209d39SAndroid Build Coastguard Worker  * UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
1554*0e209d39SAndroid Build Coastguard Worker  * UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
1555*0e209d39SAndroid Build Coastguard Worker  * UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
1556*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1557*0e209d39SAndroid Build Coastguard Worker  * @return The date difference for the specified field.
1558*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.8
1559*0e209d39SAndroid Build Coastguard Worker  */
1560*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1561*0e209d39SAndroid Build Coastguard Worker ucal_getFieldDifference(UCalendar* cal,
1562*0e209d39SAndroid Build Coastguard Worker                         UDate target,
1563*0e209d39SAndroid Build Coastguard Worker                         UCalendarDateFields field,
1564*0e209d39SAndroid Build Coastguard Worker                         UErrorCode* status);
1565*0e209d39SAndroid Build Coastguard Worker 
1566*0e209d39SAndroid Build Coastguard Worker /**
1567*0e209d39SAndroid Build Coastguard Worker  * Time zone transition types for ucal_getTimeZoneTransitionDate
1568*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 50
1569*0e209d39SAndroid Build Coastguard Worker  */
1570*0e209d39SAndroid Build Coastguard Worker enum UTimeZoneTransitionType {
1571*0e209d39SAndroid Build Coastguard Worker     /**
1572*0e209d39SAndroid Build Coastguard Worker      * Get the next transition after the current date,
1573*0e209d39SAndroid Build Coastguard Worker      * i.e. excludes the current date
1574*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 50
1575*0e209d39SAndroid Build Coastguard Worker      */
1576*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_TRANSITION_NEXT,
1577*0e209d39SAndroid Build Coastguard Worker     /**
1578*0e209d39SAndroid Build Coastguard Worker      * Get the next transition on or after the current date,
1579*0e209d39SAndroid Build Coastguard Worker      * i.e. may include the current date
1580*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 50
1581*0e209d39SAndroid Build Coastguard Worker      */
1582*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_TRANSITION_NEXT_INCLUSIVE,
1583*0e209d39SAndroid Build Coastguard Worker     /**
1584*0e209d39SAndroid Build Coastguard Worker      * Get the previous transition before the current date,
1585*0e209d39SAndroid Build Coastguard Worker      * i.e. excludes the current date
1586*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 50
1587*0e209d39SAndroid Build Coastguard Worker      */
1588*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_TRANSITION_PREVIOUS,
1589*0e209d39SAndroid Build Coastguard Worker     /**
1590*0e209d39SAndroid Build Coastguard Worker      * Get the previous transition on or before the current date,
1591*0e209d39SAndroid Build Coastguard Worker      * i.e. may include the current date
1592*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 50
1593*0e209d39SAndroid Build Coastguard Worker      */
1594*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE
1595*0e209d39SAndroid Build Coastguard Worker };
1596*0e209d39SAndroid Build Coastguard Worker 
1597*0e209d39SAndroid Build Coastguard Worker typedef enum UTimeZoneTransitionType UTimeZoneTransitionType; /**< @stable ICU 50 */
1598*0e209d39SAndroid Build Coastguard Worker 
1599*0e209d39SAndroid Build Coastguard Worker /**
1600*0e209d39SAndroid Build Coastguard Worker * Get the UDate for the next/previous time zone transition relative to
1601*0e209d39SAndroid Build Coastguard Worker * the calendar's current date, in the time zone to which the calendar
1602*0e209d39SAndroid Build Coastguard Worker * is currently set. If there is no known time zone transition of the
1603*0e209d39SAndroid Build Coastguard Worker * requested type relative to the calendar's date, the function returns
1604*0e209d39SAndroid Build Coastguard Worker * false.
1605*0e209d39SAndroid Build Coastguard Worker * @param cal The UCalendar to query.
1606*0e209d39SAndroid Build Coastguard Worker * @param type The type of transition desired.
1607*0e209d39SAndroid Build Coastguard Worker * @param transition A pointer to a UDate to be set to the transition time.
1608*0e209d39SAndroid Build Coastguard Worker *         If the function returns false, the value set is unspecified.
1609*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to a UErrorCode to receive any errors.
1610*0e209d39SAndroid Build Coastguard Worker * @return true if a valid transition time is set in *transition, false
1611*0e209d39SAndroid Build Coastguard Worker *         otherwise.
1612*0e209d39SAndroid Build Coastguard Worker * @stable ICU 50
1613*0e209d39SAndroid Build Coastguard Worker */
1614*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
1615*0e209d39SAndroid Build Coastguard Worker ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType type,
1616*0e209d39SAndroid Build Coastguard Worker                                UDate* transition, UErrorCode* status);
1617*0e209d39SAndroid Build Coastguard Worker 
1618*0e209d39SAndroid Build Coastguard Worker /**
1619*0e209d39SAndroid Build Coastguard Worker * Converts a system time zone ID to an equivalent Windows time zone ID. For example,
1620*0e209d39SAndroid Build Coastguard Worker * Windows time zone ID "Pacific Standard Time" is returned for input "America/Los_Angeles".
1621*0e209d39SAndroid Build Coastguard Worker *
1622*0e209d39SAndroid Build Coastguard Worker * <p>There are system time zones that cannot be mapped to Windows zones. When the input
1623*0e209d39SAndroid Build Coastguard Worker * system time zone ID is unknown or unmappable to a Windows time zone, then this
1624*0e209d39SAndroid Build Coastguard Worker * function returns 0 as the result length, but the operation itself remains successful
1625*0e209d39SAndroid Build Coastguard Worker * (no error status set on return).
1626*0e209d39SAndroid Build Coastguard Worker *
1627*0e209d39SAndroid Build Coastguard Worker * <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
1628*0e209d39SAndroid Build Coastguard Worker * Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
1629*0e209d39SAndroid Build Coastguard Worker * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
1630*0e209d39SAndroid Build Coastguard Worker * Updating the Time Zone Data</a>.
1631*0e209d39SAndroid Build Coastguard Worker *
1632*0e209d39SAndroid Build Coastguard Worker * @param id            A system time zone ID.
1633*0e209d39SAndroid Build Coastguard Worker * @param len           The length of <code>id</code>, or -1 if null-terminated.
1634*0e209d39SAndroid Build Coastguard Worker * @param winid         A buffer to receive a Windows time zone ID.
1635*0e209d39SAndroid Build Coastguard Worker * @param winidCapacity The capacity of the result buffer <code>winid</code>.
1636*0e209d39SAndroid Build Coastguard Worker * @param status        Receives the status.
1637*0e209d39SAndroid Build Coastguard Worker * @return              The result string length, not including the terminating null.
1638*0e209d39SAndroid Build Coastguard Worker * @see ucal_getTimeZoneIDForWindowsID
1639*0e209d39SAndroid Build Coastguard Worker *
1640*0e209d39SAndroid Build Coastguard Worker * @stable ICU 52
1641*0e209d39SAndroid Build Coastguard Worker */
1642*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1643*0e209d39SAndroid Build Coastguard Worker ucal_getWindowsTimeZoneID(const UChar* id, int32_t len,
1644*0e209d39SAndroid Build Coastguard Worker                             UChar* winid, int32_t winidCapacity, UErrorCode* status);
1645*0e209d39SAndroid Build Coastguard Worker 
1646*0e209d39SAndroid Build Coastguard Worker /**
1647*0e209d39SAndroid Build Coastguard Worker * Converts a Windows time zone ID to an equivalent system time zone ID
1648*0e209d39SAndroid Build Coastguard Worker * for a region. For example, system time zone ID "America/Los_Angeles" is returned
1649*0e209d39SAndroid Build Coastguard Worker * for input Windows ID "Pacific Standard Time" and region "US" (or <code>null</code>),
1650*0e209d39SAndroid Build Coastguard Worker * "America/Vancouver" is returned for the same Windows ID "Pacific Standard Time" and
1651*0e209d39SAndroid Build Coastguard Worker * region "CA".
1652*0e209d39SAndroid Build Coastguard Worker *
1653*0e209d39SAndroid Build Coastguard Worker * <p>Not all Windows time zones can be mapped to system time zones. When the input
1654*0e209d39SAndroid Build Coastguard Worker * Windows time zone ID is unknown or unmappable to a system time zone, then this
1655*0e209d39SAndroid Build Coastguard Worker * function returns 0 as the result length, but the operation itself remains successful
1656*0e209d39SAndroid Build Coastguard Worker * (no error status set on return).
1657*0e209d39SAndroid Build Coastguard Worker *
1658*0e209d39SAndroid Build Coastguard Worker * <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
1659*0e209d39SAndroid Build Coastguard Worker * Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
1660*0e209d39SAndroid Build Coastguard Worker * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
1661*0e209d39SAndroid Build Coastguard Worker * Updating the Time Zone Data</a>.
1662*0e209d39SAndroid Build Coastguard Worker *
1663*0e209d39SAndroid Build Coastguard Worker * @param winid         A Windows time zone ID.
1664*0e209d39SAndroid Build Coastguard Worker * @param len           The length of <code>winid</code>, or -1 if null-terminated.
1665*0e209d39SAndroid Build Coastguard Worker * @param region        A null-terminated region code, or <code>NULL</code> if no regional preference.
1666*0e209d39SAndroid Build Coastguard Worker * @param id            A buffer to receive a system time zone ID.
1667*0e209d39SAndroid Build Coastguard Worker * @param idCapacity    The capacity of the result buffer <code>id</code>.
1668*0e209d39SAndroid Build Coastguard Worker * @param status        Receives the status.
1669*0e209d39SAndroid Build Coastguard Worker * @return              The result string length, not including the terminating null.
1670*0e209d39SAndroid Build Coastguard Worker * @see ucal_getWindowsTimeZoneID
1671*0e209d39SAndroid Build Coastguard Worker *
1672*0e209d39SAndroid Build Coastguard Worker * @stable ICU 52
1673*0e209d39SAndroid Build Coastguard Worker */
1674*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1675*0e209d39SAndroid Build Coastguard Worker ucal_getTimeZoneIDForWindowsID(const UChar* winid, int32_t len, const char* region,
1676*0e209d39SAndroid Build Coastguard Worker                                 UChar* id, int32_t idCapacity, UErrorCode* status);
1677*0e209d39SAndroid Build Coastguard Worker 
1678*0e209d39SAndroid Build Coastguard Worker /**
1679*0e209d39SAndroid Build Coastguard Worker  * Options used by ucal_getTimeZoneOffsetFromLocal and BasicTimeZone::getOffsetFromLocal()
1680*0e209d39SAndroid Build Coastguard Worker  * to specify how to interpret an input time when it does not exist, or when it is ambiguous,
1681*0e209d39SAndroid Build Coastguard Worker  * around a time zone transition.
1682*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 69
1683*0e209d39SAndroid Build Coastguard Worker  */
1684*0e209d39SAndroid Build Coastguard Worker enum UTimeZoneLocalOption {
1685*0e209d39SAndroid Build Coastguard Worker     /**
1686*0e209d39SAndroid Build Coastguard Worker      * An input time is always interpreted as local time before
1687*0e209d39SAndroid Build Coastguard Worker      * a time zone transition.
1688*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 69
1689*0e209d39SAndroid Build Coastguard Worker      */
1690*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_LOCAL_FORMER = 0x04,
1691*0e209d39SAndroid Build Coastguard Worker     /**
1692*0e209d39SAndroid Build Coastguard Worker      * An input time is always interpreted as local time after
1693*0e209d39SAndroid Build Coastguard Worker      * a time zone transition.
1694*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 69
1695*0e209d39SAndroid Build Coastguard Worker      */
1696*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_LOCAL_LATTER = 0x0C,
1697*0e209d39SAndroid Build Coastguard Worker     /**
1698*0e209d39SAndroid Build Coastguard Worker      * An input time is interpreted as standard time when local
1699*0e209d39SAndroid Build Coastguard Worker      * time is switched to/from daylight saving time. When both
1700*0e209d39SAndroid Build Coastguard Worker      * sides of a time zone transition are standard time,
1701*0e209d39SAndroid Build Coastguard Worker      * or daylight saving time, the local time before the
1702*0e209d39SAndroid Build Coastguard Worker      * transition is used.
1703*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 69
1704*0e209d39SAndroid Build Coastguard Worker      */
1705*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_LOCAL_STANDARD_FORMER = UCAL_TZ_LOCAL_FORMER | 0x01,
1706*0e209d39SAndroid Build Coastguard Worker     /**
1707*0e209d39SAndroid Build Coastguard Worker      * An input time is interpreted as standard time when local
1708*0e209d39SAndroid Build Coastguard Worker      * time is switched to/from daylight saving time. When both
1709*0e209d39SAndroid Build Coastguard Worker      * sides of a time zone transition are standard time,
1710*0e209d39SAndroid Build Coastguard Worker      * or daylight saving time, the local time after the
1711*0e209d39SAndroid Build Coastguard Worker      * transition is used.
1712*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 69
1713*0e209d39SAndroid Build Coastguard Worker      */
1714*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_LOCAL_STANDARD_LATTER = UCAL_TZ_LOCAL_LATTER | 0x01,
1715*0e209d39SAndroid Build Coastguard Worker     /**
1716*0e209d39SAndroid Build Coastguard Worker      * An input time is interpreted as daylight saving time when
1717*0e209d39SAndroid Build Coastguard Worker      * local time is switched to/from standard time. When both
1718*0e209d39SAndroid Build Coastguard Worker      * sides of a time zone transition are standard time,
1719*0e209d39SAndroid Build Coastguard Worker      * or daylight saving time, the local time before the
1720*0e209d39SAndroid Build Coastguard Worker      * transition is used.
1721*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 69
1722*0e209d39SAndroid Build Coastguard Worker      */
1723*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_LOCAL_DAYLIGHT_FORMER = UCAL_TZ_LOCAL_FORMER | 0x03,
1724*0e209d39SAndroid Build Coastguard Worker     /**
1725*0e209d39SAndroid Build Coastguard Worker      * An input time is interpreted as daylight saving time when
1726*0e209d39SAndroid Build Coastguard Worker      * local time is switched to/from standard time. When both
1727*0e209d39SAndroid Build Coastguard Worker      * sides of a time zone transition are standard time,
1728*0e209d39SAndroid Build Coastguard Worker      * or daylight saving time, the local time after the
1729*0e209d39SAndroid Build Coastguard Worker      * transition is used.
1730*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 69
1731*0e209d39SAndroid Build Coastguard Worker      */
1732*0e209d39SAndroid Build Coastguard Worker     UCAL_TZ_LOCAL_DAYLIGHT_LATTER = UCAL_TZ_LOCAL_LATTER | 0x03,
1733*0e209d39SAndroid Build Coastguard Worker };
1734*0e209d39SAndroid Build Coastguard Worker typedef enum UTimeZoneLocalOption UTimeZoneLocalOption; /**< @stable ICU 69 */
1735*0e209d39SAndroid Build Coastguard Worker 
1736*0e209d39SAndroid Build Coastguard Worker /**
1737*0e209d39SAndroid Build Coastguard Worker * Returns the time zone raw and GMT offset for the given moment
1738*0e209d39SAndroid Build Coastguard Worker * in time.  Upon return, local-millis = GMT-millis + rawOffset +
1739*0e209d39SAndroid Build Coastguard Worker * dstOffset.  All computations are performed in the proleptic
1740*0e209d39SAndroid Build Coastguard Worker * Gregorian calendar.
1741*0e209d39SAndroid Build Coastguard Worker *
1742*0e209d39SAndroid Build Coastguard Worker * @param cal The UCalendar which specify the local date and time value to query.
1743*0e209d39SAndroid Build Coastguard Worker * @param nonExistingTimeOpt The option to indicate how to interpret the date and
1744*0e209d39SAndroid Build Coastguard Worker * time in the calendar represent a local time that skipped at a positive time
1745*0e209d39SAndroid Build Coastguard Worker * zone transitions (e.g. when the daylight saving time starts or the time zone
1746*0e209d39SAndroid Build Coastguard Worker * offset is increased due to a time zone rule change).
1747*0e209d39SAndroid Build Coastguard Worker * @param duplicatedTimeOpt The option to indicate how to interpret the date and
1748*0e209d39SAndroid Build Coastguard Worker * time in the calendar represent a local time that repeating multiple times at a
1749*0e209d39SAndroid Build Coastguard Worker * negative time zone transition (e.g. when the daylight saving time ends or the
1750*0e209d39SAndroid Build Coastguard Worker * time zone offset is decreased due to a time zone rule change)
1751*0e209d39SAndroid Build Coastguard Worker * @param rawOffset output parameter to receive the raw offset, that
1752*0e209d39SAndroid Build Coastguard Worker * is, the offset not including DST adjustments.
1753*0e209d39SAndroid Build Coastguard Worker * If the status is set to one of the error code, the value set is unspecified.
1754*0e209d39SAndroid Build Coastguard Worker * @param dstOffset output parameter to receive the DST offset,
1755*0e209d39SAndroid Build Coastguard Worker * that is, the offset to be added to `rawOffset' to obtain the
1756*0e209d39SAndroid Build Coastguard Worker * total offset between local and GMT time. If DST is not in
1757*0e209d39SAndroid Build Coastguard Worker * effect, this value is zero; otherwise it is a positive value,
1758*0e209d39SAndroid Build Coastguard Worker * typically one hour.
1759*0e209d39SAndroid Build Coastguard Worker * If the status is set to one of the error code, the value set is unspecified.
1760*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to a UErrorCode to receive any errors.
1761*0e209d39SAndroid Build Coastguard Worker * @stable ICU 69
1762*0e209d39SAndroid Build Coastguard Worker */
1763*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1764*0e209d39SAndroid Build Coastguard Worker ucal_getTimeZoneOffsetFromLocal(
1765*0e209d39SAndroid Build Coastguard Worker     const UCalendar* cal,
1766*0e209d39SAndroid Build Coastguard Worker     UTimeZoneLocalOption nonExistingTimeOpt,
1767*0e209d39SAndroid Build Coastguard Worker     UTimeZoneLocalOption duplicatedTimeOpt,
1768*0e209d39SAndroid Build Coastguard Worker     int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
1769*0e209d39SAndroid Build Coastguard Worker 
1770*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */
1771*0e209d39SAndroid Build Coastguard Worker 
1772*0e209d39SAndroid Build Coastguard Worker #endif
1773