xref: /aosp_15_r20/external/icu/libandroidicu/include/unicode/udat.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-2016, International Business Machines
6*0e209d39SAndroid Build Coastguard Worker  * Corporation and 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 UDAT_H
11*0e209d39SAndroid Build Coastguard Worker #define UDAT_H
12*0e209d39SAndroid Build Coastguard Worker 
13*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
14*0e209d39SAndroid Build Coastguard Worker 
15*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
16*0e209d39SAndroid Build Coastguard Worker 
17*0e209d39SAndroid Build Coastguard Worker #include "unicode/ucal.h"
18*0e209d39SAndroid Build Coastguard Worker #include "unicode/unum.h"
19*0e209d39SAndroid Build Coastguard Worker #include "unicode/udisplaycontext.h"
20*0e209d39SAndroid Build Coastguard Worker #include "unicode/ufieldpositer.h"
21*0e209d39SAndroid Build Coastguard Worker 
22*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
23*0e209d39SAndroid Build Coastguard Worker #include "unicode/localpointer.h"
24*0e209d39SAndroid Build Coastguard Worker #endif   // U_SHOW_CPLUSPLUS_API
25*0e209d39SAndroid Build Coastguard Worker 
26*0e209d39SAndroid Build Coastguard Worker /**
27*0e209d39SAndroid Build Coastguard Worker  * \file
28*0e209d39SAndroid Build Coastguard Worker  * \brief C API: DateFormat
29*0e209d39SAndroid Build Coastguard Worker  *
30*0e209d39SAndroid Build Coastguard Worker  * <h2> Date Format C API</h2>
31*0e209d39SAndroid Build Coastguard Worker  *
32*0e209d39SAndroid Build Coastguard Worker  * Date Format C API  consists of functions that convert dates and
33*0e209d39SAndroid Build Coastguard Worker  * times from their internal representations to textual form and back again in a
34*0e209d39SAndroid Build Coastguard Worker  * language-independent manner. Converting from the internal representation (milliseconds
35*0e209d39SAndroid Build Coastguard Worker  * since midnight, January 1, 1970) to text is known as "formatting," and converting
36*0e209d39SAndroid Build Coastguard Worker  * from text to millis is known as "parsing."  We currently define only one concrete
37*0e209d39SAndroid Build Coastguard Worker  * structure UDateFormat, which can handle pretty much all normal
38*0e209d39SAndroid Build Coastguard Worker  * date formatting and parsing actions.
39*0e209d39SAndroid Build Coastguard Worker  * <P>
40*0e209d39SAndroid Build Coastguard Worker  * Date Format helps you to format and parse dates for any locale. Your code can
41*0e209d39SAndroid Build Coastguard Worker  * be completely independent of the locale conventions for months, days of the
42*0e209d39SAndroid Build Coastguard Worker  * week, or even the calendar format: lunar vs. solar.
43*0e209d39SAndroid Build Coastguard Worker  * <P>
44*0e209d39SAndroid Build Coastguard Worker  * To format a date for the current Locale with default time and date style,
45*0e209d39SAndroid Build Coastguard Worker  * use one of the static factory methods:
46*0e209d39SAndroid Build Coastguard Worker  * <pre>
47*0e209d39SAndroid Build Coastguard Worker  * \code
48*0e209d39SAndroid Build Coastguard Worker  *  UErrorCode status = U_ZERO_ERROR;
49*0e209d39SAndroid Build Coastguard Worker  *  UChar *myString;
50*0e209d39SAndroid Build Coastguard Worker  *  int32_t myStrlen = 0;
51*0e209d39SAndroid Build Coastguard Worker  *  UDateFormat* dfmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &status);
52*0e209d39SAndroid Build Coastguard Worker  *  myStrlen = udat_format(dfmt, myDate, NULL, myStrlen, NULL, &status);
53*0e209d39SAndroid Build Coastguard Worker  *  if (status==U_BUFFER_OVERFLOW_ERROR){
54*0e209d39SAndroid Build Coastguard Worker  *      status=U_ZERO_ERROR;
55*0e209d39SAndroid Build Coastguard Worker  *      myString=(UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
56*0e209d39SAndroid Build Coastguard Worker  *      udat_format(dfmt, myDate, myString, myStrlen+1, NULL, &status);
57*0e209d39SAndroid Build Coastguard Worker  *  }
58*0e209d39SAndroid Build Coastguard Worker  * \endcode
59*0e209d39SAndroid Build Coastguard Worker  * </pre>
60*0e209d39SAndroid Build Coastguard Worker  * If you are formatting multiple numbers, it is more efficient to get the
61*0e209d39SAndroid Build Coastguard Worker  * format and use it multiple times so that the system doesn't have to fetch the
62*0e209d39SAndroid Build Coastguard Worker  * information about the local language and country conventions multiple times.
63*0e209d39SAndroid Build Coastguard Worker  * <pre>
64*0e209d39SAndroid Build Coastguard Worker  * \code
65*0e209d39SAndroid Build Coastguard Worker  *  UErrorCode status = U_ZERO_ERROR;
66*0e209d39SAndroid Build Coastguard Worker  *  int32_t i, myStrlen = 0;
67*0e209d39SAndroid Build Coastguard Worker  *  UChar* myString;
68*0e209d39SAndroid Build Coastguard Worker  *  char buffer[1024];
69*0e209d39SAndroid Build Coastguard Worker  *  UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values
70*0e209d39SAndroid Build Coastguard Worker  *  UDateFormat* df = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, 0, &status);
71*0e209d39SAndroid Build Coastguard Worker  *  for (i = 0; i < 3; i++) {
72*0e209d39SAndroid Build Coastguard Worker  *      myStrlen = udat_format(df, myDateArr[i], NULL, myStrlen, NULL, &status);
73*0e209d39SAndroid Build Coastguard Worker  *      if(status == U_BUFFER_OVERFLOW_ERROR){
74*0e209d39SAndroid Build Coastguard Worker  *          status = U_ZERO_ERROR;
75*0e209d39SAndroid Build Coastguard Worker  *          myString = (UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
76*0e209d39SAndroid Build Coastguard Worker  *          udat_format(df, myDateArr[i], myString, myStrlen+1, NULL, &status);
77*0e209d39SAndroid Build Coastguard Worker  *          printf("%s\n", u_austrcpy(buffer, myString) );
78*0e209d39SAndroid Build Coastguard Worker  *          free(myString);
79*0e209d39SAndroid Build Coastguard Worker  *      }
80*0e209d39SAndroid Build Coastguard Worker  *  }
81*0e209d39SAndroid Build Coastguard Worker  * \endcode
82*0e209d39SAndroid Build Coastguard Worker  * </pre>
83*0e209d39SAndroid Build Coastguard Worker  * To get specific fields of a date, you can use UFieldPosition to
84*0e209d39SAndroid Build Coastguard Worker  * get specific fields.
85*0e209d39SAndroid Build Coastguard Worker  * <pre>
86*0e209d39SAndroid Build Coastguard Worker  * \code
87*0e209d39SAndroid Build Coastguard Worker  *  UErrorCode status = U_ZERO_ERROR;
88*0e209d39SAndroid Build Coastguard Worker  *  UFieldPosition pos;
89*0e209d39SAndroid Build Coastguard Worker  *  UChar *myString;
90*0e209d39SAndroid Build Coastguard Worker  *  int32_t myStrlen = 0;
91*0e209d39SAndroid Build Coastguard Worker  *  char buffer[1024];
92*0e209d39SAndroid Build Coastguard Worker  *
93*0e209d39SAndroid Build Coastguard Worker  *  pos.field = 1;  // Same as the DateFormat::EField enum
94*0e209d39SAndroid Build Coastguard Worker  *  UDateFormat* dfmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, -1, NULL, 0, &status);
95*0e209d39SAndroid Build Coastguard Worker  *  myStrlen = udat_format(dfmt, myDate, NULL, myStrlen, &pos, &status);
96*0e209d39SAndroid Build Coastguard Worker  *  if (status==U_BUFFER_OVERFLOW_ERROR){
97*0e209d39SAndroid Build Coastguard Worker  *      status=U_ZERO_ERROR;
98*0e209d39SAndroid Build Coastguard Worker  *      myString=(UChar*)malloc(sizeof(UChar) * (myStrlen+1) );
99*0e209d39SAndroid Build Coastguard Worker  *      udat_format(dfmt, myDate, myString, myStrlen+1, &pos, &status);
100*0e209d39SAndroid Build Coastguard Worker  *  }
101*0e209d39SAndroid Build Coastguard Worker  *  printf("date format: %s\n", u_austrcpy(buffer, myString));
102*0e209d39SAndroid Build Coastguard Worker  *  buffer[pos.endIndex] = 0;   // NULL terminate the string.
103*0e209d39SAndroid Build Coastguard Worker  *  printf("UFieldPosition position equals %s\n", &buffer[pos.beginIndex]);
104*0e209d39SAndroid Build Coastguard Worker  * \endcode
105*0e209d39SAndroid Build Coastguard Worker  * </pre>
106*0e209d39SAndroid Build Coastguard Worker  * To format a date for a different Locale, specify it in the call to
107*0e209d39SAndroid Build Coastguard Worker  * udat_open()
108*0e209d39SAndroid Build Coastguard Worker  * <pre>
109*0e209d39SAndroid Build Coastguard Worker  * \code
110*0e209d39SAndroid Build Coastguard Worker  *        UDateFormat* df = udat_open(UDAT_SHORT, UDAT_SHORT, "fr_FR", NULL, -1, NULL, 0, &status);
111*0e209d39SAndroid Build Coastguard Worker  * \endcode
112*0e209d39SAndroid Build Coastguard Worker  * </pre>
113*0e209d39SAndroid Build Coastguard Worker  * You can use a DateFormat API udat_parse() to parse.
114*0e209d39SAndroid Build Coastguard Worker  * <pre>
115*0e209d39SAndroid Build Coastguard Worker  * \code
116*0e209d39SAndroid Build Coastguard Worker  *  UErrorCode status = U_ZERO_ERROR;
117*0e209d39SAndroid Build Coastguard Worker  *  int32_t parsepos=0;
118*0e209d39SAndroid Build Coastguard Worker  *  UDate myDate = udat_parse(df, myString, u_strlen(myString), &parsepos, &status);
119*0e209d39SAndroid Build Coastguard Worker  * \endcode
120*0e209d39SAndroid Build Coastguard Worker  * </pre>
121*0e209d39SAndroid Build Coastguard Worker  *  You can pass in different options for the arguments for date and time style
122*0e209d39SAndroid Build Coastguard Worker  *  to control the length of the result; from SHORT to MEDIUM to LONG to FULL.
123*0e209d39SAndroid Build Coastguard Worker  *  The exact result depends on the locale, but generally:
124*0e209d39SAndroid Build Coastguard Worker  *  see UDateFormatStyle for more details
125*0e209d39SAndroid Build Coastguard Worker  * <ul type=round>
126*0e209d39SAndroid Build Coastguard Worker  *   <li>   UDAT_SHORT is completely numeric, such as 12/13/52 or 3:30pm
127*0e209d39SAndroid Build Coastguard Worker  *   <li>   UDAT_MEDIUM is longer, such as Jan 12, 1952
128*0e209d39SAndroid Build Coastguard Worker  *   <li>   UDAT_LONG is longer, such as January 12, 1952 or 3:30:32pm
129*0e209d39SAndroid Build Coastguard Worker  *   <li>   UDAT_FULL is pretty completely specified, such as
130*0e209d39SAndroid Build Coastguard Worker  *          Tuesday, April 12, 1952 AD or 3:30:42pm PST.
131*0e209d39SAndroid Build Coastguard Worker  * </ul>
132*0e209d39SAndroid Build Coastguard Worker  * You can also set the time zone on the format if you wish.
133*0e209d39SAndroid Build Coastguard Worker  * <P>
134*0e209d39SAndroid Build Coastguard Worker  * You can also use forms of the parse and format methods with Parse Position and
135*0e209d39SAndroid Build Coastguard Worker  * UFieldPosition to allow you to
136*0e209d39SAndroid Build Coastguard Worker  * <ul type=round>
137*0e209d39SAndroid Build Coastguard Worker  *   <li>   Progressively parse through pieces of a string.
138*0e209d39SAndroid Build Coastguard Worker  *   <li>   Align any particular field, or find out where it is for selection
139*0e209d39SAndroid Build Coastguard Worker  *          on the screen.
140*0e209d39SAndroid Build Coastguard Worker  * </ul>
141*0e209d39SAndroid Build Coastguard Worker  * <p><strong>Date and Time Patterns:</strong></p>
142*0e209d39SAndroid Build Coastguard Worker  *
143*0e209d39SAndroid Build Coastguard Worker  * <p>Date and time formats are specified by <em>date and time pattern</em> strings.
144*0e209d39SAndroid Build Coastguard Worker  * Within date and time pattern strings, all unquoted ASCII letters [A-Za-z] are reserved
145*0e209d39SAndroid Build Coastguard Worker  * as pattern letters representing calendar fields. <code>UDateFormat</code> supports
146*0e209d39SAndroid Build Coastguard Worker  * the date and time formatting algorithm and pattern letters defined by
147*0e209d39SAndroid Build Coastguard Worker  * <a href="http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table">UTS#35
148*0e209d39SAndroid Build Coastguard Worker  * Unicode Locale Data Markup Language (LDML)</a> and further documented for ICU in the
149*0e209d39SAndroid Build Coastguard Worker  * <a href="https://unicode-org.github.io/icu/userguide/format_parse/datetime#date-field-symbol-table">ICU
150*0e209d39SAndroid Build Coastguard Worker  * User Guide</a>.</p>
151*0e209d39SAndroid Build Coastguard Worker  */
152*0e209d39SAndroid Build Coastguard Worker 
153*0e209d39SAndroid Build Coastguard Worker /** A date formatter.
154*0e209d39SAndroid Build Coastguard Worker  *  For usage in C programs.
155*0e209d39SAndroid Build Coastguard Worker  *  @stable ICU 2.6
156*0e209d39SAndroid Build Coastguard Worker  */
157*0e209d39SAndroid Build Coastguard Worker typedef void* UDateFormat;
158*0e209d39SAndroid Build Coastguard Worker 
159*0e209d39SAndroid Build Coastguard Worker /** The possible date/time format styles
160*0e209d39SAndroid Build Coastguard Worker  *  @stable ICU 2.6
161*0e209d39SAndroid Build Coastguard Worker  */
162*0e209d39SAndroid Build Coastguard Worker typedef enum UDateFormatStyle {
163*0e209d39SAndroid Build Coastguard Worker     /** Full style */
164*0e209d39SAndroid Build Coastguard Worker     UDAT_FULL,
165*0e209d39SAndroid Build Coastguard Worker     /** Long style */
166*0e209d39SAndroid Build Coastguard Worker     UDAT_LONG,
167*0e209d39SAndroid Build Coastguard Worker     /** Medium style */
168*0e209d39SAndroid Build Coastguard Worker     UDAT_MEDIUM,
169*0e209d39SAndroid Build Coastguard Worker     /** Short style */
170*0e209d39SAndroid Build Coastguard Worker     UDAT_SHORT,
171*0e209d39SAndroid Build Coastguard Worker     /** Default style */
172*0e209d39SAndroid Build Coastguard Worker     UDAT_DEFAULT = UDAT_MEDIUM,
173*0e209d39SAndroid Build Coastguard Worker 
174*0e209d39SAndroid Build Coastguard Worker     /** Bitfield for relative date */
175*0e209d39SAndroid Build Coastguard Worker     UDAT_RELATIVE = (1 << 7),
176*0e209d39SAndroid Build Coastguard Worker 
177*0e209d39SAndroid Build Coastguard Worker     UDAT_FULL_RELATIVE = UDAT_FULL | UDAT_RELATIVE,
178*0e209d39SAndroid Build Coastguard Worker 
179*0e209d39SAndroid Build Coastguard Worker     UDAT_LONG_RELATIVE = UDAT_LONG | UDAT_RELATIVE,
180*0e209d39SAndroid Build Coastguard Worker 
181*0e209d39SAndroid Build Coastguard Worker     UDAT_MEDIUM_RELATIVE = UDAT_MEDIUM | UDAT_RELATIVE,
182*0e209d39SAndroid Build Coastguard Worker 
183*0e209d39SAndroid Build Coastguard Worker     UDAT_SHORT_RELATIVE = UDAT_SHORT | UDAT_RELATIVE,
184*0e209d39SAndroid Build Coastguard Worker 
185*0e209d39SAndroid Build Coastguard Worker 
186*0e209d39SAndroid Build Coastguard Worker     /** No style */
187*0e209d39SAndroid Build Coastguard Worker     UDAT_NONE = -1,
188*0e209d39SAndroid Build Coastguard Worker 
189*0e209d39SAndroid Build Coastguard Worker     /**
190*0e209d39SAndroid Build Coastguard Worker      * Use the pattern given in the parameter to udat_open
191*0e209d39SAndroid Build Coastguard Worker      * @see udat_open
192*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 50
193*0e209d39SAndroid Build Coastguard Worker      */
194*0e209d39SAndroid Build Coastguard Worker     UDAT_PATTERN = -2,
195*0e209d39SAndroid Build Coastguard Worker 
196*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
197*0e209d39SAndroid Build Coastguard Worker     /** @internal alias to UDAT_PATTERN */
198*0e209d39SAndroid Build Coastguard Worker     UDAT_IGNORE = UDAT_PATTERN
199*0e209d39SAndroid Build Coastguard Worker #endif /* U_HIDE_INTERNAL_API */
200*0e209d39SAndroid Build Coastguard Worker } UDateFormatStyle;
201*0e209d39SAndroid Build Coastguard Worker 
202*0e209d39SAndroid Build Coastguard Worker /* Skeletons for dates. */
203*0e209d39SAndroid Build Coastguard Worker 
204*0e209d39SAndroid Build Coastguard Worker /**
205*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year.
206*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
207*0e209d39SAndroid Build Coastguard Worker  */
208*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR                       "y"
209*0e209d39SAndroid Build Coastguard Worker /**
210*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with quarter.
211*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
212*0e209d39SAndroid Build Coastguard Worker  */
213*0e209d39SAndroid Build Coastguard Worker #define UDAT_QUARTER                    "QQQQ"
214*0e209d39SAndroid Build Coastguard Worker /**
215*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with abbreviated quarter.
216*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
217*0e209d39SAndroid Build Coastguard Worker  */
218*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_QUARTER               "QQQ"
219*0e209d39SAndroid Build Coastguard Worker /**
220*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year and quarter.
221*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
222*0e209d39SAndroid Build Coastguard Worker  */
223*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_QUARTER               "yQQQQ"
224*0e209d39SAndroid Build Coastguard Worker /**
225*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year and abbreviated quarter.
226*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
227*0e209d39SAndroid Build Coastguard Worker  */
228*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_ABBR_QUARTER          "yQQQ"
229*0e209d39SAndroid Build Coastguard Worker /**
230*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with month.
231*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
232*0e209d39SAndroid Build Coastguard Worker  */
233*0e209d39SAndroid Build Coastguard Worker #define UDAT_MONTH                      "MMMM"
234*0e209d39SAndroid Build Coastguard Worker /**
235*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with abbreviated month.
236*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
237*0e209d39SAndroid Build Coastguard Worker  */
238*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_MONTH                 "MMM"
239*0e209d39SAndroid Build Coastguard Worker /**
240*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with numeric month.
241*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
242*0e209d39SAndroid Build Coastguard Worker  */
243*0e209d39SAndroid Build Coastguard Worker #define UDAT_NUM_MONTH                  "M"
244*0e209d39SAndroid Build Coastguard Worker /**
245*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year and month.
246*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
247*0e209d39SAndroid Build Coastguard Worker  */
248*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_MONTH                 "yMMMM"
249*0e209d39SAndroid Build Coastguard Worker /**
250*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year and abbreviated month.
251*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
252*0e209d39SAndroid Build Coastguard Worker  */
253*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_ABBR_MONTH            "yMMM"
254*0e209d39SAndroid Build Coastguard Worker /**
255*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year and numeric month.
256*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
257*0e209d39SAndroid Build Coastguard Worker  */
258*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_NUM_MONTH             "yM"
259*0e209d39SAndroid Build Coastguard Worker /**
260*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with day.
261*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
262*0e209d39SAndroid Build Coastguard Worker  */
263*0e209d39SAndroid Build Coastguard Worker #define UDAT_DAY                        "d"
264*0e209d39SAndroid Build Coastguard Worker /**
265*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year, month, and day.
266*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
267*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
268*0e209d39SAndroid Build Coastguard Worker  */
269*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_MONTH_DAY             "yMMMMd"
270*0e209d39SAndroid Build Coastguard Worker /**
271*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year, abbreviated month, and day.
272*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
273*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
274*0e209d39SAndroid Build Coastguard Worker  */
275*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_ABBR_MONTH_DAY        "yMMMd"
276*0e209d39SAndroid Build Coastguard Worker /**
277*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year, numeric month, and day.
278*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
279*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
280*0e209d39SAndroid Build Coastguard Worker  */
281*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_NUM_MONTH_DAY         "yMd"
282*0e209d39SAndroid Build Coastguard Worker /**
283*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with weekday.
284*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
285*0e209d39SAndroid Build Coastguard Worker  */
286*0e209d39SAndroid Build Coastguard Worker #define UDAT_WEEKDAY                    "EEEE"
287*0e209d39SAndroid Build Coastguard Worker /**
288*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with abbreviated weekday.
289*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
290*0e209d39SAndroid Build Coastguard Worker  */
291*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_WEEKDAY               "E"
292*0e209d39SAndroid Build Coastguard Worker /**
293*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year, month, weekday, and day.
294*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
295*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
296*0e209d39SAndroid Build Coastguard Worker  */
297*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_MONTH_WEEKDAY_DAY     "yMMMMEEEEd"
298*0e209d39SAndroid Build Coastguard Worker /**
299*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year, abbreviated month, weekday, and day.
300*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
301*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
302*0e209d39SAndroid Build Coastguard Worker  */
303*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY "yMMMEd"
304*0e209d39SAndroid Build Coastguard Worker /**
305*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with year, numeric month, weekday, and day.
306*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
307*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
308*0e209d39SAndroid Build Coastguard Worker  */
309*0e209d39SAndroid Build Coastguard Worker #define UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY "yMEd"
310*0e209d39SAndroid Build Coastguard Worker /**
311*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with long month and day.
312*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
313*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
314*0e209d39SAndroid Build Coastguard Worker  */
315*0e209d39SAndroid Build Coastguard Worker #define UDAT_MONTH_DAY                  "MMMMd"
316*0e209d39SAndroid Build Coastguard Worker /**
317*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with abbreviated month and day.
318*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
319*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
320*0e209d39SAndroid Build Coastguard Worker  */
321*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_MONTH_DAY             "MMMd"
322*0e209d39SAndroid Build Coastguard Worker /**
323*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with numeric month and day.
324*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
325*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
326*0e209d39SAndroid Build Coastguard Worker  */
327*0e209d39SAndroid Build Coastguard Worker #define UDAT_NUM_MONTH_DAY              "Md"
328*0e209d39SAndroid Build Coastguard Worker /**
329*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with month, weekday, and day.
330*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
331*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
332*0e209d39SAndroid Build Coastguard Worker  */
333*0e209d39SAndroid Build Coastguard Worker #define UDAT_MONTH_WEEKDAY_DAY          "MMMMEEEEd"
334*0e209d39SAndroid Build Coastguard Worker /**
335*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with abbreviated month, weekday, and day.
336*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
337*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
338*0e209d39SAndroid Build Coastguard Worker  */
339*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_MONTH_WEEKDAY_DAY     "MMMEd"
340*0e209d39SAndroid Build Coastguard Worker /**
341*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with numeric month, weekday, and day.
342*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
343*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
344*0e209d39SAndroid Build Coastguard Worker  */
345*0e209d39SAndroid Build Coastguard Worker #define UDAT_NUM_MONTH_WEEKDAY_DAY      "MEd"
346*0e209d39SAndroid Build Coastguard Worker 
347*0e209d39SAndroid Build Coastguard Worker /* Skeletons for times. */
348*0e209d39SAndroid Build Coastguard Worker 
349*0e209d39SAndroid Build Coastguard Worker /**
350*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour, with the locale's preferred hour format (12 or 24).
351*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
352*0e209d39SAndroid Build Coastguard Worker  */
353*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR                       "j"
354*0e209d39SAndroid Build Coastguard Worker /**
355*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour in 24-hour presentation.
356*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
357*0e209d39SAndroid Build Coastguard Worker  */
358*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR24                     "H"
359*0e209d39SAndroid Build Coastguard Worker /**
360*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with minute.
361*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
362*0e209d39SAndroid Build Coastguard Worker  */
363*0e209d39SAndroid Build Coastguard Worker #define UDAT_MINUTE                     "m"
364*0e209d39SAndroid Build Coastguard Worker /**
365*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour and minute, with the locale's preferred hour format (12 or 24).
366*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
367*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
368*0e209d39SAndroid Build Coastguard Worker  */
369*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR_MINUTE                "jm"
370*0e209d39SAndroid Build Coastguard Worker /**
371*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour and minute in 24-hour presentation.
372*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
373*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
374*0e209d39SAndroid Build Coastguard Worker  */
375*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR24_MINUTE              "Hm"
376*0e209d39SAndroid Build Coastguard Worker /**
377*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with second.
378*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
379*0e209d39SAndroid Build Coastguard Worker  */
380*0e209d39SAndroid Build Coastguard Worker #define UDAT_SECOND                     "s"
381*0e209d39SAndroid Build Coastguard Worker /**
382*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour, minute, and second,
383*0e209d39SAndroid Build Coastguard Worker  * with the locale's preferred hour format (12 or 24).
384*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
385*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
386*0e209d39SAndroid Build Coastguard Worker  */
387*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR_MINUTE_SECOND         "jms"
388*0e209d39SAndroid Build Coastguard Worker /**
389*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour, minute, and second in
390*0e209d39SAndroid Build Coastguard Worker  * 24-hour presentation.
391*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
392*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
393*0e209d39SAndroid Build Coastguard Worker  */
394*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR24_MINUTE_SECOND       "Hms"
395*0e209d39SAndroid Build Coastguard Worker /**
396*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with minute and second.
397*0e209d39SAndroid Build Coastguard Worker  * Used in combinations date + time, date + time + zone, or time + zone.
398*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.0
399*0e209d39SAndroid Build Coastguard Worker  */
400*0e209d39SAndroid Build Coastguard Worker #define UDAT_MINUTE_SECOND              "ms"
401*0e209d39SAndroid Build Coastguard Worker 
402*0e209d39SAndroid Build Coastguard Worker /* Skeletons for time zones. */
403*0e209d39SAndroid Build Coastguard Worker 
404*0e209d39SAndroid Build Coastguard Worker /**
405*0e209d39SAndroid Build Coastguard Worker  * Constant for <i>generic location format</i>, such as Los Angeles Time;
406*0e209d39SAndroid Build Coastguard Worker  * used in combinations date + time + zone, or time + zone.
407*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
408*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
409*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
410*0e209d39SAndroid Build Coastguard Worker  */
411*0e209d39SAndroid Build Coastguard Worker #define UDAT_LOCATION_TZ "VVVV"
412*0e209d39SAndroid Build Coastguard Worker /**
413*0e209d39SAndroid Build Coastguard Worker  * Constant for <i>generic non-location format</i>, such as Pacific Time;
414*0e209d39SAndroid Build Coastguard Worker  * used in combinations date + time + zone, or time + zone.
415*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
416*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
417*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
418*0e209d39SAndroid Build Coastguard Worker  */
419*0e209d39SAndroid Build Coastguard Worker #define UDAT_GENERIC_TZ "vvvv"
420*0e209d39SAndroid Build Coastguard Worker /**
421*0e209d39SAndroid Build Coastguard Worker  * Constant for <i>generic non-location format</i>, abbreviated if possible, such as PT;
422*0e209d39SAndroid Build Coastguard Worker  * used in combinations date + time + zone, or time + zone.
423*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
424*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
425*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
426*0e209d39SAndroid Build Coastguard Worker  */
427*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_GENERIC_TZ "v"
428*0e209d39SAndroid Build Coastguard Worker /**
429*0e209d39SAndroid Build Coastguard Worker  * Constant for <i>specific non-location format</i>, such as Pacific Daylight Time;
430*0e209d39SAndroid Build Coastguard Worker  * used in combinations date + time + zone, or time + zone.
431*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
432*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
433*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
434*0e209d39SAndroid Build Coastguard Worker  */
435*0e209d39SAndroid Build Coastguard Worker #define UDAT_SPECIFIC_TZ "zzzz"
436*0e209d39SAndroid Build Coastguard Worker /**
437*0e209d39SAndroid Build Coastguard Worker  * Constant for <i>specific non-location format</i>, abbreviated if possible, such as PDT;
438*0e209d39SAndroid Build Coastguard Worker  * used in combinations date + time + zone, or time + zone.
439*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
440*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
441*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
442*0e209d39SAndroid Build Coastguard Worker  */
443*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_SPECIFIC_TZ "z"
444*0e209d39SAndroid Build Coastguard Worker /**
445*0e209d39SAndroid Build Coastguard Worker  * Constant for <i>localized GMT/UTC format</i>, such as GMT+8:00 or HPG-8:00;
446*0e209d39SAndroid Build Coastguard Worker  * used in combinations date + time + zone, or time + zone.
447*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
448*0e209d39SAndroid Build Coastguard Worker  * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
449*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
450*0e209d39SAndroid Build Coastguard Worker  */
451*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_UTC_TZ "ZZZZ"
452*0e209d39SAndroid Build Coastguard Worker 
453*0e209d39SAndroid Build Coastguard Worker /* deprecated skeleton constants */
454*0e209d39SAndroid Build Coastguard Worker 
455*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
456*0e209d39SAndroid Build Coastguard Worker /**
457*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with standalone month.
458*0e209d39SAndroid Build Coastguard Worker  * @deprecated ICU 50 Use UDAT_MONTH instead.
459*0e209d39SAndroid Build Coastguard Worker  */
460*0e209d39SAndroid Build Coastguard Worker #define UDAT_STANDALONE_MONTH           "LLLL"
461*0e209d39SAndroid Build Coastguard Worker /**
462*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with standalone abbreviated month.
463*0e209d39SAndroid Build Coastguard Worker  * @deprecated ICU 50 Use UDAT_ABBR_MONTH instead.
464*0e209d39SAndroid Build Coastguard Worker  */
465*0e209d39SAndroid Build Coastguard Worker #define UDAT_ABBR_STANDALONE_MONTH      "LLL"
466*0e209d39SAndroid Build Coastguard Worker 
467*0e209d39SAndroid Build Coastguard Worker /**
468*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour, minute, and generic timezone.
469*0e209d39SAndroid Build Coastguard Worker  * @deprecated ICU 50 Use instead UDAT_HOUR_MINUTE UDAT_ABBR_GENERIC_TZ or some other timezone presentation.
470*0e209d39SAndroid Build Coastguard Worker  */
471*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR_MINUTE_GENERIC_TZ     "jmv"
472*0e209d39SAndroid Build Coastguard Worker /**
473*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour, minute, and timezone.
474*0e209d39SAndroid Build Coastguard Worker  * @deprecated ICU 50 Use instead UDAT_HOUR_MINUTE UDAT_ABBR_SPECIFIC_TZ or some other timezone presentation.
475*0e209d39SAndroid Build Coastguard Worker  */
476*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR_MINUTE_TZ             "jmz"
477*0e209d39SAndroid Build Coastguard Worker /**
478*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour and generic timezone.
479*0e209d39SAndroid Build Coastguard Worker  * @deprecated ICU 50 Use instead UDAT_HOUR UDAT_ABBR_GENERIC_TZ or some other timezone presentation.
480*0e209d39SAndroid Build Coastguard Worker  */
481*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR_GENERIC_TZ            "jv"
482*0e209d39SAndroid Build Coastguard Worker /**
483*0e209d39SAndroid Build Coastguard Worker  * Constant for date skeleton with hour and timezone.
484*0e209d39SAndroid Build Coastguard Worker  * @deprecated ICU 50 Use instead UDAT_HOUR UDAT_ABBR_SPECIFIC_TZ or some other timezone presentation.
485*0e209d39SAndroid Build Coastguard Worker  */
486*0e209d39SAndroid Build Coastguard Worker #define UDAT_HOUR_TZ                    "jz"
487*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_DEPRECATED_API */
488*0e209d39SAndroid Build Coastguard Worker 
489*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
490*0e209d39SAndroid Build Coastguard Worker /**
491*0e209d39SAndroid Build Coastguard Worker  * Constant for Unicode string name of new (in 2019) Japanese calendar era,
492*0e209d39SAndroid Build Coastguard Worker  * root/English abbreviated version (ASCII-range characters).
493*0e209d39SAndroid Build Coastguard Worker  * @internal
494*0e209d39SAndroid Build Coastguard Worker  */
495*0e209d39SAndroid Build Coastguard Worker #define JP_ERA_2019_ROOT                "Reiwa"
496*0e209d39SAndroid Build Coastguard Worker /**
497*0e209d39SAndroid Build Coastguard Worker  * Constant for Unicode string name of new (in 2019) Japanese calendar era,
498*0e209d39SAndroid Build Coastguard Worker  * Japanese abbreviated version (Han, or fullwidth Latin for testing).
499*0e209d39SAndroid Build Coastguard Worker  * @internal
500*0e209d39SAndroid Build Coastguard Worker  */
501*0e209d39SAndroid Build Coastguard Worker #define JP_ERA_2019_JA                  "\\u4EE4\\u548C"
502*0e209d39SAndroid Build Coastguard Worker /**
503*0e209d39SAndroid Build Coastguard Worker  * Constant for Unicode string name of new (in 2019) Japanese calendar era,
504*0e209d39SAndroid Build Coastguard Worker  * root and Japanese narrow version (ASCII-range characters).
505*0e209d39SAndroid Build Coastguard Worker  * @internal
506*0e209d39SAndroid Build Coastguard Worker  */
507*0e209d39SAndroid Build Coastguard Worker #define JP_ERA_2019_NARROW              "R"
508*0e209d39SAndroid Build Coastguard Worker #endif  // U_HIDE_INTERNAL_API
509*0e209d39SAndroid Build Coastguard Worker 
510*0e209d39SAndroid Build Coastguard Worker /**
511*0e209d39SAndroid Build Coastguard Worker  * FieldPosition and UFieldPosition selectors for format fields
512*0e209d39SAndroid Build Coastguard Worker  * defined by DateFormat and UDateFormat.
513*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 3.0
514*0e209d39SAndroid Build Coastguard Worker  */
515*0e209d39SAndroid Build Coastguard Worker typedef enum UDateFormatField {
516*0e209d39SAndroid Build Coastguard Worker     /**
517*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'G' field alignment,
518*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ERA field.
519*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
520*0e209d39SAndroid Build Coastguard Worker      */
521*0e209d39SAndroid Build Coastguard Worker     UDAT_ERA_FIELD = 0,
522*0e209d39SAndroid Build Coastguard Worker 
523*0e209d39SAndroid Build Coastguard Worker     /**
524*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'y' field alignment,
525*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_YEAR field.
526*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
527*0e209d39SAndroid Build Coastguard Worker      */
528*0e209d39SAndroid Build Coastguard Worker     UDAT_YEAR_FIELD = 1,
529*0e209d39SAndroid Build Coastguard Worker 
530*0e209d39SAndroid Build Coastguard Worker     /**
531*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'M' field alignment,
532*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_MONTH field.
533*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
534*0e209d39SAndroid Build Coastguard Worker      */
535*0e209d39SAndroid Build Coastguard Worker     UDAT_MONTH_FIELD = 2,
536*0e209d39SAndroid Build Coastguard Worker 
537*0e209d39SAndroid Build Coastguard Worker     /**
538*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'd' field alignment,
539*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_DATE field.
540*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
541*0e209d39SAndroid Build Coastguard Worker      */
542*0e209d39SAndroid Build Coastguard Worker     UDAT_DATE_FIELD = 3,
543*0e209d39SAndroid Build Coastguard Worker 
544*0e209d39SAndroid Build Coastguard Worker     /**
545*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'k' field alignment,
546*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_HOUR_OF_DAY field.
547*0e209d39SAndroid Build Coastguard Worker      * UDAT_HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock.
548*0e209d39SAndroid Build Coastguard Worker      * For example, 23:59 + 01:00 results in 24:59.
549*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
550*0e209d39SAndroid Build Coastguard Worker      */
551*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR_OF_DAY1_FIELD = 4,
552*0e209d39SAndroid Build Coastguard Worker 
553*0e209d39SAndroid Build Coastguard Worker     /**
554*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'H' field alignment,
555*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_HOUR_OF_DAY field.
556*0e209d39SAndroid Build Coastguard Worker      * UDAT_HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
557*0e209d39SAndroid Build Coastguard Worker      * For example, 23:59 + 01:00 results in 00:59.
558*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
559*0e209d39SAndroid Build Coastguard Worker      */
560*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR_OF_DAY0_FIELD = 5,
561*0e209d39SAndroid Build Coastguard Worker 
562*0e209d39SAndroid Build Coastguard Worker     /**
563*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'm' field alignment,
564*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_MINUTE field.
565*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
566*0e209d39SAndroid Build Coastguard Worker      */
567*0e209d39SAndroid Build Coastguard Worker     UDAT_MINUTE_FIELD = 6,
568*0e209d39SAndroid Build Coastguard Worker 
569*0e209d39SAndroid Build Coastguard Worker     /**
570*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 's' field alignment,
571*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_SECOND field.
572*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
573*0e209d39SAndroid Build Coastguard Worker      */
574*0e209d39SAndroid Build Coastguard Worker     UDAT_SECOND_FIELD = 7,
575*0e209d39SAndroid Build Coastguard Worker 
576*0e209d39SAndroid Build Coastguard Worker     /**
577*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'S' field alignment,
578*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_MILLISECOND field.
579*0e209d39SAndroid Build Coastguard Worker      *
580*0e209d39SAndroid Build Coastguard Worker      * Note: Time formats that use 'S' can display a maximum of three
581*0e209d39SAndroid Build Coastguard Worker      * significant digits for fractional seconds, corresponding to millisecond
582*0e209d39SAndroid Build Coastguard Worker      * resolution and a fractional seconds sub-pattern of SSS. If the
583*0e209d39SAndroid Build Coastguard Worker      * sub-pattern is S or SS, the fractional seconds value will be truncated
584*0e209d39SAndroid Build Coastguard Worker      * (not rounded) to the number of display places specified. If the
585*0e209d39SAndroid Build Coastguard Worker      * fractional seconds sub-pattern is longer than SSS, the additional
586*0e209d39SAndroid Build Coastguard Worker      * display places will be filled with zeros.
587*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
588*0e209d39SAndroid Build Coastguard Worker      */
589*0e209d39SAndroid Build Coastguard Worker     UDAT_FRACTIONAL_SECOND_FIELD = 8,
590*0e209d39SAndroid Build Coastguard Worker 
591*0e209d39SAndroid Build Coastguard Worker     /**
592*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'E' field alignment,
593*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_DAY_OF_WEEK field.
594*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
595*0e209d39SAndroid Build Coastguard Worker      */
596*0e209d39SAndroid Build Coastguard Worker     UDAT_DAY_OF_WEEK_FIELD = 9,
597*0e209d39SAndroid Build Coastguard Worker 
598*0e209d39SAndroid Build Coastguard Worker     /**
599*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'D' field alignment,
600*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_DAY_OF_YEAR field.
601*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
602*0e209d39SAndroid Build Coastguard Worker      */
603*0e209d39SAndroid Build Coastguard Worker     UDAT_DAY_OF_YEAR_FIELD = 10,
604*0e209d39SAndroid Build Coastguard Worker 
605*0e209d39SAndroid Build Coastguard Worker     /**
606*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'F' field alignment,
607*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_DAY_OF_WEEK_IN_MONTH field.
608*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
609*0e209d39SAndroid Build Coastguard Worker      */
610*0e209d39SAndroid Build Coastguard Worker     UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11,
611*0e209d39SAndroid Build Coastguard Worker 
612*0e209d39SAndroid Build Coastguard Worker     /**
613*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'w' field alignment,
614*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_WEEK_OF_YEAR field.
615*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
616*0e209d39SAndroid Build Coastguard Worker      */
617*0e209d39SAndroid Build Coastguard Worker     UDAT_WEEK_OF_YEAR_FIELD = 12,
618*0e209d39SAndroid Build Coastguard Worker 
619*0e209d39SAndroid Build Coastguard Worker     /**
620*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'W' field alignment,
621*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_WEEK_OF_MONTH field.
622*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
623*0e209d39SAndroid Build Coastguard Worker      */
624*0e209d39SAndroid Build Coastguard Worker     UDAT_WEEK_OF_MONTH_FIELD = 13,
625*0e209d39SAndroid Build Coastguard Worker 
626*0e209d39SAndroid Build Coastguard Worker     /**
627*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'a' field alignment,
628*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_AM_PM field.
629*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
630*0e209d39SAndroid Build Coastguard Worker      */
631*0e209d39SAndroid Build Coastguard Worker     UDAT_AM_PM_FIELD = 14,
632*0e209d39SAndroid Build Coastguard Worker 
633*0e209d39SAndroid Build Coastguard Worker     /**
634*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'h' field alignment,
635*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_HOUR field.
636*0e209d39SAndroid Build Coastguard Worker      * UDAT_HOUR1_FIELD is used for the one-based 12-hour clock.
637*0e209d39SAndroid Build Coastguard Worker      * For example, 11:30 PM + 1 hour results in 12:30 AM.
638*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
639*0e209d39SAndroid Build Coastguard Worker      */
640*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR1_FIELD = 15,
641*0e209d39SAndroid Build Coastguard Worker 
642*0e209d39SAndroid Build Coastguard Worker     /**
643*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'K' field alignment,
644*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_HOUR field.
645*0e209d39SAndroid Build Coastguard Worker      * UDAT_HOUR0_FIELD is used for the zero-based 12-hour clock.
646*0e209d39SAndroid Build Coastguard Worker      * For example, 11:30 PM + 1 hour results in 00:30 AM.
647*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
648*0e209d39SAndroid Build Coastguard Worker      */
649*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR0_FIELD = 16,
650*0e209d39SAndroid Build Coastguard Worker 
651*0e209d39SAndroid Build Coastguard Worker     /**
652*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'z' field alignment,
653*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET and
654*0e209d39SAndroid Build Coastguard Worker      * UCAL_DST_OFFSET fields.
655*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
656*0e209d39SAndroid Build Coastguard Worker      */
657*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_FIELD = 17,
658*0e209d39SAndroid Build Coastguard Worker 
659*0e209d39SAndroid Build Coastguard Worker     /**
660*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'Y' field alignment,
661*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_YEAR_WOY field.
662*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
663*0e209d39SAndroid Build Coastguard Worker      */
664*0e209d39SAndroid Build Coastguard Worker     UDAT_YEAR_WOY_FIELD = 18,
665*0e209d39SAndroid Build Coastguard Worker 
666*0e209d39SAndroid Build Coastguard Worker     /**
667*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'e' field alignment,
668*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_DOW_LOCAL field.
669*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
670*0e209d39SAndroid Build Coastguard Worker      */
671*0e209d39SAndroid Build Coastguard Worker     UDAT_DOW_LOCAL_FIELD = 19,
672*0e209d39SAndroid Build Coastguard Worker 
673*0e209d39SAndroid Build Coastguard Worker     /**
674*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'u' field alignment,
675*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_EXTENDED_YEAR field.
676*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
677*0e209d39SAndroid Build Coastguard Worker      */
678*0e209d39SAndroid Build Coastguard Worker     UDAT_EXTENDED_YEAR_FIELD = 20,
679*0e209d39SAndroid Build Coastguard Worker 
680*0e209d39SAndroid Build Coastguard Worker     /**
681*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'g' field alignment,
682*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_JULIAN_DAY field.
683*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
684*0e209d39SAndroid Build Coastguard Worker      */
685*0e209d39SAndroid Build Coastguard Worker     UDAT_JULIAN_DAY_FIELD = 21,
686*0e209d39SAndroid Build Coastguard Worker 
687*0e209d39SAndroid Build Coastguard Worker     /**
688*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'A' field alignment,
689*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_MILLISECONDS_IN_DAY field.
690*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
691*0e209d39SAndroid Build Coastguard Worker      */
692*0e209d39SAndroid Build Coastguard Worker     UDAT_MILLISECONDS_IN_DAY_FIELD = 22,
693*0e209d39SAndroid Build Coastguard Worker 
694*0e209d39SAndroid Build Coastguard Worker     /**
695*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'Z' field alignment,
696*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET and
697*0e209d39SAndroid Build Coastguard Worker      * UCAL_DST_OFFSET fields.
698*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.0
699*0e209d39SAndroid Build Coastguard Worker      */
700*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_RFC_FIELD = 23,
701*0e209d39SAndroid Build Coastguard Worker 
702*0e209d39SAndroid Build Coastguard Worker     /**
703*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'v' field alignment,
704*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET field.
705*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.4
706*0e209d39SAndroid Build Coastguard Worker      */
707*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_GENERIC_FIELD = 24,
708*0e209d39SAndroid Build Coastguard Worker     /**
709*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for 'c' field alignment,
710*0e209d39SAndroid Build Coastguard Worker      * corresponding to the {@link #UCAL_DOW_LOCAL} field.
711*0e209d39SAndroid Build Coastguard Worker      * This displays the stand alone day name, if available.
712*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.4
713*0e209d39SAndroid Build Coastguard Worker      */
714*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_DAY_FIELD = 25,
715*0e209d39SAndroid Build Coastguard Worker 
716*0e209d39SAndroid Build Coastguard Worker     /**
717*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for 'L' field alignment,
718*0e209d39SAndroid Build Coastguard Worker      * corresponding to the {@link #UCAL_MONTH} field.
719*0e209d39SAndroid Build Coastguard Worker      * This displays the stand alone month name, if available.
720*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.4
721*0e209d39SAndroid Build Coastguard Worker      */
722*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_MONTH_FIELD = 26,
723*0e209d39SAndroid Build Coastguard Worker 
724*0e209d39SAndroid Build Coastguard Worker     /**
725*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for "Q" field alignment,
726*0e209d39SAndroid Build Coastguard Worker      * corresponding to quarters. This is implemented
727*0e209d39SAndroid Build Coastguard Worker      * using the {@link #UCAL_MONTH} field. This
728*0e209d39SAndroid Build Coastguard Worker      * displays the quarter.
729*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.6
730*0e209d39SAndroid Build Coastguard Worker      */
731*0e209d39SAndroid Build Coastguard Worker     UDAT_QUARTER_FIELD = 27,
732*0e209d39SAndroid Build Coastguard Worker 
733*0e209d39SAndroid Build Coastguard Worker     /**
734*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for the "q" field alignment,
735*0e209d39SAndroid Build Coastguard Worker      * corresponding to stand-alone quarters. This is
736*0e209d39SAndroid Build Coastguard Worker      * implemented using the {@link #UCAL_MONTH} field.
737*0e209d39SAndroid Build Coastguard Worker      * This displays the stand-alone quarter.
738*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.6
739*0e209d39SAndroid Build Coastguard Worker      */
740*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_QUARTER_FIELD = 28,
741*0e209d39SAndroid Build Coastguard Worker 
742*0e209d39SAndroid Build Coastguard Worker     /**
743*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'V' field alignment,
744*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET field.
745*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 3.8
746*0e209d39SAndroid Build Coastguard Worker      */
747*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_SPECIAL_FIELD = 29,
748*0e209d39SAndroid Build Coastguard Worker 
749*0e209d39SAndroid Build Coastguard Worker     /**
750*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for "U" field alignment,
751*0e209d39SAndroid Build Coastguard Worker      * corresponding to cyclic year names. This is implemented
752*0e209d39SAndroid Build Coastguard Worker      * using the {@link #UCAL_YEAR} field. This displays
753*0e209d39SAndroid Build Coastguard Worker      * the cyclic year name, if available.
754*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 49
755*0e209d39SAndroid Build Coastguard Worker      */
756*0e209d39SAndroid Build Coastguard Worker     UDAT_YEAR_NAME_FIELD = 30,
757*0e209d39SAndroid Build Coastguard Worker 
758*0e209d39SAndroid Build Coastguard Worker     /**
759*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for 'O' field alignment,
760*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSETfields.
761*0e209d39SAndroid Build Coastguard Worker      * This displays the localized GMT format.
762*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 51
763*0e209d39SAndroid Build Coastguard Worker      */
764*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31,
765*0e209d39SAndroid Build Coastguard Worker 
766*0e209d39SAndroid Build Coastguard Worker     /**
767*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for 'X' field alignment,
768*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSETfields.
769*0e209d39SAndroid Build Coastguard Worker      * This displays the ISO 8601 local time offset format or UTC indicator ("Z").
770*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 51
771*0e209d39SAndroid Build Coastguard Worker      */
772*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_ISO_FIELD = 32,
773*0e209d39SAndroid Build Coastguard Worker 
774*0e209d39SAndroid Build Coastguard Worker     /**
775*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for 'x' field alignment,
776*0e209d39SAndroid Build Coastguard Worker      * corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSET fields.
777*0e209d39SAndroid Build Coastguard Worker      * This displays the ISO 8601 local time offset format.
778*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 51
779*0e209d39SAndroid Build Coastguard Worker      */
780*0e209d39SAndroid Build Coastguard Worker     UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33,
781*0e209d39SAndroid Build Coastguard Worker 
782*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
783*0e209d39SAndroid Build Coastguard Worker     /**
784*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for 'r' field alignment,
785*0e209d39SAndroid Build Coastguard Worker      * no directly corresponding UCAL_ field.
786*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 53
787*0e209d39SAndroid Build Coastguard Worker      */
788*0e209d39SAndroid Build Coastguard Worker     UDAT_RELATED_YEAR_FIELD = 34,
789*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_INTERNAL_API */
790*0e209d39SAndroid Build Coastguard Worker 
791*0e209d39SAndroid Build Coastguard Worker     /**
792*0e209d39SAndroid Build Coastguard Worker      * FieldPosition selector for 'b' field alignment.
793*0e209d39SAndroid Build Coastguard Worker      * Displays midnight and noon for 12am and 12pm, respectively, if available;
794*0e209d39SAndroid Build Coastguard Worker      * otherwise fall back to AM / PM.
795*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
796*0e209d39SAndroid Build Coastguard Worker      */
797*0e209d39SAndroid Build Coastguard Worker     UDAT_AM_PM_MIDNIGHT_NOON_FIELD = 35,
798*0e209d39SAndroid Build Coastguard Worker 
799*0e209d39SAndroid Build Coastguard Worker     /* FieldPosition selector for 'B' field alignment.
800*0e209d39SAndroid Build Coastguard Worker      * Displays flexible day periods, such as "in the morning", if available.
801*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
802*0e209d39SAndroid Build Coastguard Worker      */
803*0e209d39SAndroid Build Coastguard Worker     UDAT_FLEXIBLE_DAY_PERIOD_FIELD = 36,
804*0e209d39SAndroid Build Coastguard Worker 
805*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
806*0e209d39SAndroid Build Coastguard Worker     /**
807*0e209d39SAndroid Build Coastguard Worker      * FieldPosition and UFieldPosition selector for time separator,
808*0e209d39SAndroid Build Coastguard Worker      * no corresponding UCAL_ field. No pattern character is currently
809*0e209d39SAndroid Build Coastguard Worker      * defined for this.
810*0e209d39SAndroid Build Coastguard Worker      * @internal
811*0e209d39SAndroid Build Coastguard Worker      */
812*0e209d39SAndroid Build Coastguard Worker     UDAT_TIME_SEPARATOR_FIELD = 37,
813*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_INTERNAL_API */
814*0e209d39SAndroid Build Coastguard Worker 
815*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
816*0e209d39SAndroid Build Coastguard Worker     /**
817*0e209d39SAndroid Build Coastguard Worker      * Number of FieldPosition and UFieldPosition selectors for
818*0e209d39SAndroid Build Coastguard Worker      * DateFormat and UDateFormat.
819*0e209d39SAndroid Build Coastguard Worker      * Valid selectors range from 0 to UDAT_FIELD_COUNT-1.
820*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
821*0e209d39SAndroid Build Coastguard Worker      */
822*0e209d39SAndroid Build Coastguard Worker     UDAT_FIELD_COUNT = 38
823*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_DEPRECATED_API */
824*0e209d39SAndroid Build Coastguard Worker } UDateFormatField;
825*0e209d39SAndroid Build Coastguard Worker 
826*0e209d39SAndroid Build Coastguard Worker 
827*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
828*0e209d39SAndroid Build Coastguard Worker /**
829*0e209d39SAndroid Build Coastguard Worker  * Is a pattern character defined for UDAT_TIME_SEPARATOR_FIELD?
830*0e209d39SAndroid Build Coastguard Worker  * In ICU 55 it was COLON, but that was withdrawn in ICU 56.
831*0e209d39SAndroid Build Coastguard Worker  * @internal ICU 56
832*0e209d39SAndroid Build Coastguard Worker  */
833*0e209d39SAndroid Build Coastguard Worker #define UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR 0
834*0e209d39SAndroid Build Coastguard Worker #endif /* U_HIDE_INTERNAL_API */
835*0e209d39SAndroid Build Coastguard Worker 
836*0e209d39SAndroid Build Coastguard Worker 
837*0e209d39SAndroid Build Coastguard Worker /**
838*0e209d39SAndroid Build Coastguard Worker  * Maps from a UDateFormatField to the corresponding UCalendarDateFields.
839*0e209d39SAndroid Build Coastguard Worker  *
840*0e209d39SAndroid Build Coastguard Worker  * Note 1: Since the mapping is many-to-one, there is no inverse mapping.
841*0e209d39SAndroid Build Coastguard Worker  *
842*0e209d39SAndroid Build Coastguard Worker  * Note 2: There is no UErrorCode parameter, so in case of error (UDateFormatField is
843*0e209d39SAndroid Build Coastguard Worker  * unknown or has no corresponding UCalendarDateFields value), the function returns the
844*0e209d39SAndroid Build Coastguard Worker  * current value of UCAL_FIELD_COUNT. However, that value may change from release to
845*0e209d39SAndroid Build Coastguard Worker  * release and is consequently deprecated. For a future-proof runtime way of checking
846*0e209d39SAndroid Build Coastguard Worker  * for errors:
847*0e209d39SAndroid Build Coastguard Worker  * a) First save the value returned by the function when it is passed an invalid value
848*0e209d39SAndroid Build Coastguard Worker  *    such as "(UDateFormatField)-1".
849*0e209d39SAndroid Build Coastguard Worker  * b) Then, to test for errors when passing some other UDateFormatField value, check
850*0e209d39SAndroid Build Coastguard Worker  *     whether the function returns that saved value.
851*0e209d39SAndroid Build Coastguard Worker  *
852*0e209d39SAndroid Build Coastguard Worker  * @param field the UDateFormatField.
853*0e209d39SAndroid Build Coastguard Worker  * @return the UCalendarDateField. In case of error (UDateFormatField is unknown or has
854*0e209d39SAndroid Build Coastguard Worker  *   no corresponding UCalendarDateFields value) this will be the current value of
855*0e209d39SAndroid Build Coastguard Worker  *   UCAL_FIELD_COUNT, but that value may change from release to release.
856*0e209d39SAndroid Build Coastguard Worker  *   See Note 2 above.
857*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
858*0e209d39SAndroid Build Coastguard Worker  */
859*0e209d39SAndroid Build Coastguard Worker U_CAPI UCalendarDateFields U_EXPORT2
860*0e209d39SAndroid Build Coastguard Worker udat_toCalendarDateField(UDateFormatField field);
861*0e209d39SAndroid Build Coastguard Worker 
862*0e209d39SAndroid Build Coastguard Worker 
863*0e209d39SAndroid Build Coastguard Worker /**
864*0e209d39SAndroid Build Coastguard Worker  * Open a new UDateFormat for formatting and parsing dates and times.
865*0e209d39SAndroid Build Coastguard Worker  * A UDateFormat may be used to format dates in calls to {@link #udat_format },
866*0e209d39SAndroid Build Coastguard Worker  * and to parse dates in calls to {@link #udat_parse }.
867*0e209d39SAndroid Build Coastguard Worker  * @param timeStyle The style used to format times; one of UDAT_FULL, UDAT_LONG,
868*0e209d39SAndroid Build Coastguard Worker  * UDAT_MEDIUM, UDAT_SHORT, UDAT_DEFAULT, or UDAT_NONE (relative time styles
869*0e209d39SAndroid Build Coastguard Worker  * are not currently supported).
870*0e209d39SAndroid Build Coastguard Worker  * When the pattern parameter is used, pass in UDAT_PATTERN for both timeStyle and dateStyle.
871*0e209d39SAndroid Build Coastguard Worker  * @param dateStyle The style used to format dates; one of UDAT_FULL, UDAT_LONG,
872*0e209d39SAndroid Build Coastguard Worker  * UDAT_MEDIUM, UDAT_SHORT, UDAT_DEFAULT, UDAT_FULL_RELATIVE, UDAT_LONG_RELATIVE,
873*0e209d39SAndroid Build Coastguard Worker  * UDAT_MEDIUM_RELATIVE, UDAT_SHORT_RELATIVE, or UDAT_NONE.
874*0e209d39SAndroid Build Coastguard Worker  * When the pattern parameter is used, pass in UDAT_PATTERN for both timeStyle and dateStyle.
875*0e209d39SAndroid Build Coastguard Worker  * As currently implemented,
876*0e209d39SAndroid Build Coastguard Worker  * relative date formatting only affects a limited range of calendar days before or
877*0e209d39SAndroid Build Coastguard Worker  * after the current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For
878*0e209d39SAndroid Build Coastguard Worker  * example, in English, "Yesterday", "Today", and "Tomorrow". Outside of this range,
879*0e209d39SAndroid Build Coastguard Worker  * dates are formatted using the corresponding non-relative style.
880*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale specifying the formatting conventions
881*0e209d39SAndroid Build Coastguard Worker  * @param tzID A timezone ID specifying the timezone to use.  If 0, use
882*0e209d39SAndroid Build Coastguard Worker  * the default timezone.
883*0e209d39SAndroid Build Coastguard Worker  * @param tzIDLength The length of tzID, or -1 if null-terminated.
884*0e209d39SAndroid Build Coastguard Worker  * @param pattern A pattern specifying the format to use.
885*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The number of characters in the pattern, or -1 if null-terminated.
886*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
887*0e209d39SAndroid Build Coastguard Worker  * @return A pointer to a UDateFormat to use for formatting dates and times, or 0 if
888*0e209d39SAndroid Build Coastguard Worker  * an error occurred.
889*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
890*0e209d39SAndroid Build Coastguard Worker  */
891*0e209d39SAndroid Build Coastguard Worker U_CAPI UDateFormat* U_EXPORT2
892*0e209d39SAndroid Build Coastguard Worker udat_open(UDateFormatStyle  timeStyle,
893*0e209d39SAndroid Build Coastguard Worker           UDateFormatStyle  dateStyle,
894*0e209d39SAndroid Build Coastguard Worker           const char        *locale,
895*0e209d39SAndroid Build Coastguard Worker           const UChar       *tzID,
896*0e209d39SAndroid Build Coastguard Worker           int32_t           tzIDLength,
897*0e209d39SAndroid Build Coastguard Worker           const UChar       *pattern,
898*0e209d39SAndroid Build Coastguard Worker           int32_t           patternLength,
899*0e209d39SAndroid Build Coastguard Worker           UErrorCode        *status);
900*0e209d39SAndroid Build Coastguard Worker 
901*0e209d39SAndroid Build Coastguard Worker 
902*0e209d39SAndroid Build Coastguard Worker /**
903*0e209d39SAndroid Build Coastguard Worker * Close a UDateFormat.
904*0e209d39SAndroid Build Coastguard Worker * Once closed, a UDateFormat may no longer be used.
905*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to close.
906*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
907*0e209d39SAndroid Build Coastguard Worker */
908*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
909*0e209d39SAndroid Build Coastguard Worker udat_close(UDateFormat* format);
910*0e209d39SAndroid Build Coastguard Worker 
911*0e209d39SAndroid Build Coastguard Worker 
912*0e209d39SAndroid Build Coastguard Worker /**
913*0e209d39SAndroid Build Coastguard Worker  * DateFormat boolean attributes
914*0e209d39SAndroid Build Coastguard Worker  *
915*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 53
916*0e209d39SAndroid Build Coastguard Worker  */
917*0e209d39SAndroid Build Coastguard Worker typedef enum UDateFormatBooleanAttribute {
918*0e209d39SAndroid Build Coastguard Worker    /**
919*0e209d39SAndroid Build Coastguard Worker      * indicates whether whitespace is allowed. Includes trailing dot tolerance.
920*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
921*0e209d39SAndroid Build Coastguard Worker      */
922*0e209d39SAndroid Build Coastguard Worker     UDAT_PARSE_ALLOW_WHITESPACE = 0,
923*0e209d39SAndroid Build Coastguard Worker     /**
924*0e209d39SAndroid Build Coastguard Worker      * indicates tolerance of numeric data when String data may be assumed. eg: UDAT_YEAR_NAME_FIELD,
925*0e209d39SAndroid Build Coastguard Worker      * UDAT_STANDALONE_MONTH_FIELD, UDAT_DAY_OF_WEEK_FIELD
926*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 53
927*0e209d39SAndroid Build Coastguard Worker      */
928*0e209d39SAndroid Build Coastguard Worker     UDAT_PARSE_ALLOW_NUMERIC = 1,
929*0e209d39SAndroid Build Coastguard Worker     /**
930*0e209d39SAndroid Build Coastguard Worker      * indicates tolerance of a partial literal match
931*0e209d39SAndroid Build Coastguard Worker      * e.g. accepting "--mon-02-march-2011" for a pattern of "'--: 'EEE-WW-MMMM-yyyy"
932*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 56
933*0e209d39SAndroid Build Coastguard Worker      */
934*0e209d39SAndroid Build Coastguard Worker     UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2,
935*0e209d39SAndroid Build Coastguard Worker     /**
936*0e209d39SAndroid Build Coastguard Worker      * indicates tolerance of pattern mismatch between input data and specified format pattern.
937*0e209d39SAndroid Build Coastguard Worker      * e.g. accepting "September" for a month pattern of MMM ("Sep")
938*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 56
939*0e209d39SAndroid Build Coastguard Worker      */
940*0e209d39SAndroid Build Coastguard Worker     UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3,
941*0e209d39SAndroid Build Coastguard Worker 
942*0e209d39SAndroid Build Coastguard Worker     /* Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API,
943*0e209d39SAndroid Build Coastguard Worker      * it is needed for layout of DateFormat object. */
944*0e209d39SAndroid Build Coastguard Worker #ifndef U_FORCE_HIDE_DEPRECATED_API
945*0e209d39SAndroid Build Coastguard Worker     /**
946*0e209d39SAndroid Build Coastguard Worker      * One more than the highest normal UDateFormatBooleanAttribute value.
947*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
948*0e209d39SAndroid Build Coastguard Worker      */
949*0e209d39SAndroid Build Coastguard Worker     UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4
950*0e209d39SAndroid Build Coastguard Worker #endif  // U_FORCE_HIDE_DEPRECATED_API
951*0e209d39SAndroid Build Coastguard Worker } UDateFormatBooleanAttribute;
952*0e209d39SAndroid Build Coastguard Worker 
953*0e209d39SAndroid Build Coastguard Worker /**
954*0e209d39SAndroid Build Coastguard Worker  * Get a boolean attribute associated with a UDateFormat.
955*0e209d39SAndroid Build Coastguard Worker  * An example would be a true value for a key of UDAT_PARSE_ALLOW_WHITESPACE indicating allowing whitespace leniency.
956*0e209d39SAndroid Build Coastguard Worker  * If the formatter does not understand the attribute, -1 is returned.
957*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to query.
958*0e209d39SAndroid Build Coastguard Worker  * @param attr The attribute to query; e.g. UDAT_PARSE_ALLOW_WHITESPACE.
959*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
960*0e209d39SAndroid Build Coastguard Worker  * @return The value of attr.
961*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 53
962*0e209d39SAndroid Build Coastguard Worker  */
963*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
964*0e209d39SAndroid Build Coastguard Worker udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute attr, UErrorCode* status);
965*0e209d39SAndroid Build Coastguard Worker 
966*0e209d39SAndroid Build Coastguard Worker /**
967*0e209d39SAndroid Build Coastguard Worker  * Set a boolean attribute associated with a UDateFormat.
968*0e209d39SAndroid Build Coastguard Worker  * An example of a boolean attribute is parse leniency control.  If the formatter does not understand
969*0e209d39SAndroid Build Coastguard Worker  * the attribute, the call is ignored.
970*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to set.
971*0e209d39SAndroid Build Coastguard Worker  * @param attr The attribute to set; one of UDAT_PARSE_ALLOW_WHITESPACE or UDAT_PARSE_ALLOW_NUMERIC
972*0e209d39SAndroid Build Coastguard Worker  * @param newValue The new value of attr.
973*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
974*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 53
975*0e209d39SAndroid Build Coastguard Worker  */
976*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
977*0e209d39SAndroid Build Coastguard Worker udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
978*0e209d39SAndroid Build Coastguard Worker 
979*0e209d39SAndroid Build Coastguard Worker /**
980*0e209d39SAndroid Build Coastguard Worker  * Hour Cycle.
981*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 67
982*0e209d39SAndroid Build Coastguard Worker  */
983*0e209d39SAndroid Build Coastguard Worker typedef enum UDateFormatHourCycle {
984*0e209d39SAndroid Build Coastguard Worker     /**
985*0e209d39SAndroid Build Coastguard Worker      * Hour in am/pm (0~11)
986*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 67
987*0e209d39SAndroid Build Coastguard Worker      */
988*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR_CYCLE_11,
989*0e209d39SAndroid Build Coastguard Worker 
990*0e209d39SAndroid Build Coastguard Worker     /**
991*0e209d39SAndroid Build Coastguard Worker      * Hour in am/pm (1~12)
992*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 67
993*0e209d39SAndroid Build Coastguard Worker      */
994*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR_CYCLE_12,
995*0e209d39SAndroid Build Coastguard Worker 
996*0e209d39SAndroid Build Coastguard Worker     /**
997*0e209d39SAndroid Build Coastguard Worker      * Hour in day (0~23)
998*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 67
999*0e209d39SAndroid Build Coastguard Worker      */
1000*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR_CYCLE_23,
1001*0e209d39SAndroid Build Coastguard Worker 
1002*0e209d39SAndroid Build Coastguard Worker     /**
1003*0e209d39SAndroid Build Coastguard Worker      * Hour in day (1~24)
1004*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 67
1005*0e209d39SAndroid Build Coastguard Worker      */
1006*0e209d39SAndroid Build Coastguard Worker     UDAT_HOUR_CYCLE_24
1007*0e209d39SAndroid Build Coastguard Worker } UDateFormatHourCycle;
1008*0e209d39SAndroid Build Coastguard Worker 
1009*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
1010*0e209d39SAndroid Build Coastguard Worker 
1011*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
1012*0e209d39SAndroid Build Coastguard Worker 
1013*0e209d39SAndroid Build Coastguard Worker /**
1014*0e209d39SAndroid Build Coastguard Worker  * \class LocalUDateFormatPointer
1015*0e209d39SAndroid Build Coastguard Worker  * "Smart pointer" class, closes a UDateFormat via udat_close().
1016*0e209d39SAndroid Build Coastguard Worker  * For most methods see the LocalPointerBase base class.
1017*0e209d39SAndroid Build Coastguard Worker  *
1018*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointerBase
1019*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointer
1020*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
1021*0e209d39SAndroid Build Coastguard Worker  */
1022*0e209d39SAndroid Build Coastguard Worker U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
1023*0e209d39SAndroid Build Coastguard Worker 
1024*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
1025*0e209d39SAndroid Build Coastguard Worker 
1026*0e209d39SAndroid Build Coastguard Worker #endif
1027*0e209d39SAndroid Build Coastguard Worker 
1028*0e209d39SAndroid Build Coastguard Worker /**
1029*0e209d39SAndroid Build Coastguard Worker  * Open a copy of a UDateFormat.
1030*0e209d39SAndroid Build Coastguard Worker  * This function performs a deep copy.
1031*0e209d39SAndroid Build Coastguard Worker  * @param fmt The format to copy
1032*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors.
1033*0e209d39SAndroid Build Coastguard Worker  * @return A pointer to a UDateFormat identical to fmt.
1034*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
1035*0e209d39SAndroid Build Coastguard Worker  */
1036*0e209d39SAndroid Build Coastguard Worker U_CAPI UDateFormat* U_EXPORT2
1037*0e209d39SAndroid Build Coastguard Worker udat_clone(const UDateFormat *fmt,
1038*0e209d39SAndroid Build Coastguard Worker        UErrorCode *status);
1039*0e209d39SAndroid Build Coastguard Worker 
1040*0e209d39SAndroid Build Coastguard Worker /**
1041*0e209d39SAndroid Build Coastguard Worker * Format a date using a UDateFormat.
1042*0e209d39SAndroid Build Coastguard Worker * The date will be formatted using the conventions specified in {@link #udat_open }
1043*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to use
1044*0e209d39SAndroid Build Coastguard Worker * @param dateToFormat The date to format
1045*0e209d39SAndroid Build Coastguard Worker * @param result A pointer to a buffer to receive the formatted number.
1046*0e209d39SAndroid Build Coastguard Worker * @param resultLength The maximum size of result.
1047*0e209d39SAndroid Build Coastguard Worker * @param position A pointer to a UFieldPosition.  On input, position->field
1048*0e209d39SAndroid Build Coastguard Worker * is read.  On output, position->beginIndex and position->endIndex indicate
1049*0e209d39SAndroid Build Coastguard Worker * the beginning and ending indices of field number position->field, if such
1050*0e209d39SAndroid Build Coastguard Worker * a field exists.  This parameter may be NULL, in which case no field
1051*0e209d39SAndroid Build Coastguard Worker * position data is returned.
1052*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1053*0e209d39SAndroid Build Coastguard Worker * @return The total buffer size needed; if greater than resultLength, the output was truncated.
1054*0e209d39SAndroid Build Coastguard Worker * @see udat_parse
1055*0e209d39SAndroid Build Coastguard Worker * @see UFieldPosition
1056*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1057*0e209d39SAndroid Build Coastguard Worker */
1058*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1059*0e209d39SAndroid Build Coastguard Worker udat_format(    const    UDateFormat*    format,
1060*0e209d39SAndroid Build Coastguard Worker                         UDate           dateToFormat,
1061*0e209d39SAndroid Build Coastguard Worker                         UChar*          result,
1062*0e209d39SAndroid Build Coastguard Worker                         int32_t         resultLength,
1063*0e209d39SAndroid Build Coastguard Worker                         UFieldPosition* position,
1064*0e209d39SAndroid Build Coastguard Worker                         UErrorCode*     status);
1065*0e209d39SAndroid Build Coastguard Worker 
1066*0e209d39SAndroid Build Coastguard Worker /**
1067*0e209d39SAndroid Build Coastguard Worker * Format a date using an UDateFormat.
1068*0e209d39SAndroid Build Coastguard Worker * The date will be formatted using the conventions specified in {@link #udat_open }
1069*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to use
1070*0e209d39SAndroid Build Coastguard Worker * @param calendar The calendar to format. The calendar instance might be
1071*0e209d39SAndroid Build Coastguard Worker *                 mutated if fields are not yet fully calculated, though
1072*0e209d39SAndroid Build Coastguard Worker *                 the function won't change the logical date and time held
1073*0e209d39SAndroid Build Coastguard Worker *                 by the instance.
1074*0e209d39SAndroid Build Coastguard Worker * @param result A pointer to a buffer to receive the formatted number.
1075*0e209d39SAndroid Build Coastguard Worker * @param capacity The maximum size of result.
1076*0e209d39SAndroid Build Coastguard Worker * @param position A pointer to a UFieldPosition.  On input, position->field
1077*0e209d39SAndroid Build Coastguard Worker * is read.  On output, position->beginIndex and position->endIndex indicate
1078*0e209d39SAndroid Build Coastguard Worker * the beginning and ending indices of field number position->field, if such
1079*0e209d39SAndroid Build Coastguard Worker * a field exists.  This parameter may be NULL, in which case no field
1080*0e209d39SAndroid Build Coastguard Worker * position data is returned.
1081*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1082*0e209d39SAndroid Build Coastguard Worker * @return The total buffer size needed; if greater than resultLength, the output was truncated.
1083*0e209d39SAndroid Build Coastguard Worker * @see udat_format
1084*0e209d39SAndroid Build Coastguard Worker * @see udat_parseCalendar
1085*0e209d39SAndroid Build Coastguard Worker * @see UFieldPosition
1086*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55
1087*0e209d39SAndroid Build Coastguard Worker */
1088*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1089*0e209d39SAndroid Build Coastguard Worker udat_formatCalendar(    const UDateFormat*  format,
1090*0e209d39SAndroid Build Coastguard Worker                         UCalendar*      calendar,
1091*0e209d39SAndroid Build Coastguard Worker                         UChar*          result,
1092*0e209d39SAndroid Build Coastguard Worker                         int32_t         capacity,
1093*0e209d39SAndroid Build Coastguard Worker                         UFieldPosition* position,
1094*0e209d39SAndroid Build Coastguard Worker                         UErrorCode*     status);
1095*0e209d39SAndroid Build Coastguard Worker 
1096*0e209d39SAndroid Build Coastguard Worker /**
1097*0e209d39SAndroid Build Coastguard Worker * Format a date using a UDateFormat.
1098*0e209d39SAndroid Build Coastguard Worker * The date will be formatted using the conventions specified in {@link #udat_open}
1099*0e209d39SAndroid Build Coastguard Worker * @param format
1100*0e209d39SAndroid Build Coastguard Worker *          The formatter to use
1101*0e209d39SAndroid Build Coastguard Worker * @param dateToFormat
1102*0e209d39SAndroid Build Coastguard Worker *          The date to format
1103*0e209d39SAndroid Build Coastguard Worker * @param result
1104*0e209d39SAndroid Build Coastguard Worker *          A pointer to a buffer to receive the formatted number.
1105*0e209d39SAndroid Build Coastguard Worker * @param resultLength
1106*0e209d39SAndroid Build Coastguard Worker *          The maximum size of result.
1107*0e209d39SAndroid Build Coastguard Worker * @param fpositer
1108*0e209d39SAndroid Build Coastguard Worker *          A pointer to a UFieldPositionIterator created by {@link #ufieldpositer_open}
1109*0e209d39SAndroid Build Coastguard Worker *          (may be NULL if field position information is not needed). Any
1110*0e209d39SAndroid Build Coastguard Worker *          iteration information already present in the UFieldPositionIterator
1111*0e209d39SAndroid Build Coastguard Worker *          will be deleted, and the iterator will be reset to apply to the
1112*0e209d39SAndroid Build Coastguard Worker *          fields in the formatted string created by this function call; the
1113*0e209d39SAndroid Build Coastguard Worker *          field values provided by {@link #ufieldpositer_next} will be from the
1114*0e209d39SAndroid Build Coastguard Worker *          UDateFormatField enum.
1115*0e209d39SAndroid Build Coastguard Worker * @param status
1116*0e209d39SAndroid Build Coastguard Worker *          A pointer to a UErrorCode to receive any errors
1117*0e209d39SAndroid Build Coastguard Worker * @return
1118*0e209d39SAndroid Build Coastguard Worker *          The total buffer size needed; if greater than resultLength, the output was truncated.
1119*0e209d39SAndroid Build Coastguard Worker * @see udat_parse
1120*0e209d39SAndroid Build Coastguard Worker * @see UFieldPositionIterator
1121*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55
1122*0e209d39SAndroid Build Coastguard Worker */
1123*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1124*0e209d39SAndroid Build Coastguard Worker udat_formatForFields(   const UDateFormat* format,
1125*0e209d39SAndroid Build Coastguard Worker                         UDate           dateToFormat,
1126*0e209d39SAndroid Build Coastguard Worker                         UChar*          result,
1127*0e209d39SAndroid Build Coastguard Worker                         int32_t         resultLength,
1128*0e209d39SAndroid Build Coastguard Worker                         UFieldPositionIterator* fpositer,
1129*0e209d39SAndroid Build Coastguard Worker                         UErrorCode*     status);
1130*0e209d39SAndroid Build Coastguard Worker 
1131*0e209d39SAndroid Build Coastguard Worker /**
1132*0e209d39SAndroid Build Coastguard Worker * Format a date using a UDateFormat.
1133*0e209d39SAndroid Build Coastguard Worker * The date will be formatted using the conventions specified in {@link #udat_open }
1134*0e209d39SAndroid Build Coastguard Worker * @param format
1135*0e209d39SAndroid Build Coastguard Worker *          The formatter to use
1136*0e209d39SAndroid Build Coastguard Worker * @param calendar
1137*0e209d39SAndroid Build Coastguard Worker *          The calendar to format. The calendar instance might be mutated if fields
1138*0e209d39SAndroid Build Coastguard Worker *          are not yet fully calculated, though the function won't change the logical
1139*0e209d39SAndroid Build Coastguard Worker *          date and time held by the instance.
1140*0e209d39SAndroid Build Coastguard Worker * @param result
1141*0e209d39SAndroid Build Coastguard Worker *          A pointer to a buffer to receive the formatted number.
1142*0e209d39SAndroid Build Coastguard Worker * @param capacity
1143*0e209d39SAndroid Build Coastguard Worker *          The maximum size of result.
1144*0e209d39SAndroid Build Coastguard Worker * @param fpositer
1145*0e209d39SAndroid Build Coastguard Worker *          A pointer to a UFieldPositionIterator created by {@link #ufieldpositer_open}
1146*0e209d39SAndroid Build Coastguard Worker *          (may be NULL if field position information is not needed). Any
1147*0e209d39SAndroid Build Coastguard Worker *          iteration information already present in the UFieldPositionIterator
1148*0e209d39SAndroid Build Coastguard Worker *          will be deleted, and the iterator will be reset to apply to the
1149*0e209d39SAndroid Build Coastguard Worker *          fields in the formatted string created by this function call; the
1150*0e209d39SAndroid Build Coastguard Worker *          field values provided by {@link #ufieldpositer_next} will be from the
1151*0e209d39SAndroid Build Coastguard Worker *          UDateFormatField enum.
1152*0e209d39SAndroid Build Coastguard Worker * @param status
1153*0e209d39SAndroid Build Coastguard Worker *          A pointer to a UErrorCode to receive any errors
1154*0e209d39SAndroid Build Coastguard Worker * @return
1155*0e209d39SAndroid Build Coastguard Worker *          The total buffer size needed; if greater than resultLength, the output was truncated.
1156*0e209d39SAndroid Build Coastguard Worker * @see udat_format
1157*0e209d39SAndroid Build Coastguard Worker * @see udat_parseCalendar
1158*0e209d39SAndroid Build Coastguard Worker * @see UFieldPositionIterator
1159*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55
1160*0e209d39SAndroid Build Coastguard Worker */
1161*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1162*0e209d39SAndroid Build Coastguard Worker udat_formatCalendarForFields( const UDateFormat* format,
1163*0e209d39SAndroid Build Coastguard Worker                         UCalendar*      calendar,
1164*0e209d39SAndroid Build Coastguard Worker                         UChar*          result,
1165*0e209d39SAndroid Build Coastguard Worker                         int32_t         capacity,
1166*0e209d39SAndroid Build Coastguard Worker                         UFieldPositionIterator* fpositer,
1167*0e209d39SAndroid Build Coastguard Worker                         UErrorCode*     status);
1168*0e209d39SAndroid Build Coastguard Worker 
1169*0e209d39SAndroid Build Coastguard Worker 
1170*0e209d39SAndroid Build Coastguard Worker /**
1171*0e209d39SAndroid Build Coastguard Worker * Parse a string into an date/time using a UDateFormat.
1172*0e209d39SAndroid Build Coastguard Worker * The date will be parsed using the conventions specified in {@link #udat_open }.
1173*0e209d39SAndroid Build Coastguard Worker * <P>
1174*0e209d39SAndroid Build Coastguard Worker * Note that the normal date formats associated with some calendars - such
1175*0e209d39SAndroid Build Coastguard Worker * as the Chinese lunar calendar - do not specify enough fields to enable
1176*0e209d39SAndroid Build Coastguard Worker * dates to be parsed unambiguously. In the case of the Chinese lunar
1177*0e209d39SAndroid Build Coastguard Worker * calendar, while the year within the current 60-year cycle is specified,
1178*0e209d39SAndroid Build Coastguard Worker * the number of such cycles since the start date of the calendar (in the
1179*0e209d39SAndroid Build Coastguard Worker * UCAL_ERA field of the UCalendar object) is not normally part of the format,
1180*0e209d39SAndroid Build Coastguard Worker * and parsing may assume the wrong era. For cases such as this it is
1181*0e209d39SAndroid Build Coastguard Worker * recommended that clients parse using udat_parseCalendar with the UCalendar
1182*0e209d39SAndroid Build Coastguard Worker * passed in set to the current date, or to a date within the era/cycle that
1183*0e209d39SAndroid Build Coastguard Worker * should be assumed if absent in the format.
1184*0e209d39SAndroid Build Coastguard Worker *
1185*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to use.
1186*0e209d39SAndroid Build Coastguard Worker * @param text The text to parse.
1187*0e209d39SAndroid Build Coastguard Worker * @param textLength The length of text, or -1 if null-terminated.
1188*0e209d39SAndroid Build Coastguard Worker * @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
1189*0e209d39SAndroid Build Coastguard Worker * to begin parsing.  If not 0, on output the offset at which parsing ended.
1190*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1191*0e209d39SAndroid Build Coastguard Worker * @return The value of the parsed date/time
1192*0e209d39SAndroid Build Coastguard Worker * @see udat_format
1193*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1194*0e209d39SAndroid Build Coastguard Worker */
1195*0e209d39SAndroid Build Coastguard Worker U_CAPI UDate U_EXPORT2
1196*0e209d39SAndroid Build Coastguard Worker udat_parse(const    UDateFormat*    format,
1197*0e209d39SAndroid Build Coastguard Worker            const    UChar*          text,
1198*0e209d39SAndroid Build Coastguard Worker                     int32_t         textLength,
1199*0e209d39SAndroid Build Coastguard Worker                     int32_t         *parsePos,
1200*0e209d39SAndroid Build Coastguard Worker                     UErrorCode      *status);
1201*0e209d39SAndroid Build Coastguard Worker 
1202*0e209d39SAndroid Build Coastguard Worker /**
1203*0e209d39SAndroid Build Coastguard Worker * Parse a string into an date/time using a UDateFormat.
1204*0e209d39SAndroid Build Coastguard Worker * The date will be parsed using the conventions specified in {@link #udat_open }.
1205*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to use.
1206*0e209d39SAndroid Build Coastguard Worker * @param calendar A calendar set on input to the date and time to be used for
1207*0e209d39SAndroid Build Coastguard Worker *                 missing values in the date/time string being parsed, and set
1208*0e209d39SAndroid Build Coastguard Worker *                 on output to the parsed date/time. When the calendar type is
1209*0e209d39SAndroid Build Coastguard Worker *                 different from the internal calendar held by the UDateFormat
1210*0e209d39SAndroid Build Coastguard Worker *                 instance, the internal calendar will be cloned to a work
1211*0e209d39SAndroid Build Coastguard Worker *                 calendar set to the same milliseconds and time zone as this
1212*0e209d39SAndroid Build Coastguard Worker *                 calendar parameter, field values will be parsed based on the
1213*0e209d39SAndroid Build Coastguard Worker *                 work calendar, then the result (milliseconds and time zone)
1214*0e209d39SAndroid Build Coastguard Worker *                 will be set in this calendar.
1215*0e209d39SAndroid Build Coastguard Worker * @param text The text to parse.
1216*0e209d39SAndroid Build Coastguard Worker * @param textLength The length of text, or -1 if null-terminated.
1217*0e209d39SAndroid Build Coastguard Worker * @param parsePos If not 0, on input a pointer to an integer specifying the offset at which
1218*0e209d39SAndroid Build Coastguard Worker * to begin parsing.  If not 0, on output the offset at which parsing ended.
1219*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1220*0e209d39SAndroid Build Coastguard Worker * @see udat_format
1221*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1222*0e209d39SAndroid Build Coastguard Worker */
1223*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1224*0e209d39SAndroid Build Coastguard Worker udat_parseCalendar(const    UDateFormat*    format,
1225*0e209d39SAndroid Build Coastguard Worker                             UCalendar*      calendar,
1226*0e209d39SAndroid Build Coastguard Worker                    const    UChar*          text,
1227*0e209d39SAndroid Build Coastguard Worker                             int32_t         textLength,
1228*0e209d39SAndroid Build Coastguard Worker                             int32_t         *parsePos,
1229*0e209d39SAndroid Build Coastguard Worker                             UErrorCode      *status);
1230*0e209d39SAndroid Build Coastguard Worker 
1231*0e209d39SAndroid Build Coastguard Worker /**
1232*0e209d39SAndroid Build Coastguard Worker * Determine if an UDateFormat will perform lenient parsing.
1233*0e209d39SAndroid Build Coastguard Worker * With lenient parsing, the parser may use heuristics to interpret inputs that do not
1234*0e209d39SAndroid Build Coastguard Worker * precisely match the pattern. With strict parsing, inputs must match the pattern.
1235*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query
1236*0e209d39SAndroid Build Coastguard Worker * @return true if fmt is set to perform lenient parsing, false otherwise.
1237*0e209d39SAndroid Build Coastguard Worker * @see udat_setLenient
1238*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1239*0e209d39SAndroid Build Coastguard Worker */
1240*0e209d39SAndroid Build Coastguard Worker U_CAPI UBool U_EXPORT2
1241*0e209d39SAndroid Build Coastguard Worker udat_isLenient(const UDateFormat* fmt);
1242*0e209d39SAndroid Build Coastguard Worker 
1243*0e209d39SAndroid Build Coastguard Worker /**
1244*0e209d39SAndroid Build Coastguard Worker * Specify whether an UDateFormat will perform lenient parsing.
1245*0e209d39SAndroid Build Coastguard Worker * With lenient parsing, the parser may use heuristics to interpret inputs that do not
1246*0e209d39SAndroid Build Coastguard Worker * precisely match the pattern. With strict parsing, inputs must match the pattern.
1247*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to set
1248*0e209d39SAndroid Build Coastguard Worker * @param isLenient true if fmt should perform lenient parsing, false otherwise.
1249*0e209d39SAndroid Build Coastguard Worker * @see dat_isLenient
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 udat_setLenient(    UDateFormat*    fmt,
1254*0e209d39SAndroid Build Coastguard Worker                     UBool          isLenient);
1255*0e209d39SAndroid Build Coastguard Worker 
1256*0e209d39SAndroid Build Coastguard Worker /**
1257*0e209d39SAndroid Build Coastguard Worker * Get the UCalendar associated with an UDateFormat.
1258*0e209d39SAndroid Build Coastguard Worker * A UDateFormat uses a UCalendar to convert a raw value to, for example,
1259*0e209d39SAndroid Build Coastguard Worker * the day of the week.
1260*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1261*0e209d39SAndroid Build Coastguard Worker * @return A pointer to the UCalendar used by fmt.
1262*0e209d39SAndroid Build Coastguard Worker * @see udat_setCalendar
1263*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1264*0e209d39SAndroid Build Coastguard Worker */
1265*0e209d39SAndroid Build Coastguard Worker U_CAPI const UCalendar* U_EXPORT2
1266*0e209d39SAndroid Build Coastguard Worker udat_getCalendar(const UDateFormat* fmt);
1267*0e209d39SAndroid Build Coastguard Worker 
1268*0e209d39SAndroid Build Coastguard Worker /**
1269*0e209d39SAndroid Build Coastguard Worker * Set the UCalendar associated with an UDateFormat.
1270*0e209d39SAndroid Build Coastguard Worker * A UDateFormat uses a UCalendar to convert a raw value to, for example,
1271*0e209d39SAndroid Build Coastguard Worker * the day of the week.
1272*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to set.
1273*0e209d39SAndroid Build Coastguard Worker * @param calendarToSet A pointer to an UCalendar to be used by fmt.
1274*0e209d39SAndroid Build Coastguard Worker * @see udat_setCalendar
1275*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1276*0e209d39SAndroid Build Coastguard Worker */
1277*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1278*0e209d39SAndroid Build Coastguard Worker udat_setCalendar(            UDateFormat*    fmt,
1279*0e209d39SAndroid Build Coastguard Worker                     const   UCalendar*      calendarToSet);
1280*0e209d39SAndroid Build Coastguard Worker 
1281*0e209d39SAndroid Build Coastguard Worker /**
1282*0e209d39SAndroid Build Coastguard Worker * Get the UNumberFormat associated with an UDateFormat.
1283*0e209d39SAndroid Build Coastguard Worker * A UDateFormat uses a UNumberFormat to format numbers within a date,
1284*0e209d39SAndroid Build Coastguard Worker * for example the day number.
1285*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1286*0e209d39SAndroid Build Coastguard Worker * @return A pointer to the UNumberFormat used by fmt to format numbers.
1287*0e209d39SAndroid Build Coastguard Worker * @see udat_setNumberFormat
1288*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1289*0e209d39SAndroid Build Coastguard Worker */
1290*0e209d39SAndroid Build Coastguard Worker U_CAPI const UNumberFormat* U_EXPORT2
1291*0e209d39SAndroid Build Coastguard Worker udat_getNumberFormat(const UDateFormat* fmt);
1292*0e209d39SAndroid Build Coastguard Worker 
1293*0e209d39SAndroid Build Coastguard Worker /**
1294*0e209d39SAndroid Build Coastguard Worker * Get the UNumberFormat for specific field associated with an UDateFormat.
1295*0e209d39SAndroid Build Coastguard Worker * For example: 'y' for year and 'M' for month
1296*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1297*0e209d39SAndroid Build Coastguard Worker * @param field the field to query
1298*0e209d39SAndroid Build Coastguard Worker * @return A pointer to the UNumberFormat used by fmt to format field numbers.
1299*0e209d39SAndroid Build Coastguard Worker * @see udat_setNumberFormatForField
1300*0e209d39SAndroid Build Coastguard Worker * @stable ICU 54
1301*0e209d39SAndroid Build Coastguard Worker */
1302*0e209d39SAndroid Build Coastguard Worker U_CAPI const UNumberFormat* U_EXPORT2
1303*0e209d39SAndroid Build Coastguard Worker udat_getNumberFormatForField(const UDateFormat* fmt, UChar field);
1304*0e209d39SAndroid Build Coastguard Worker 
1305*0e209d39SAndroid Build Coastguard Worker /**
1306*0e209d39SAndroid Build Coastguard Worker * Set the UNumberFormat for specific field associated with an UDateFormat.
1307*0e209d39SAndroid Build Coastguard Worker * It can be a single field like: "y"(year) or "M"(month)
1308*0e209d39SAndroid Build Coastguard Worker * It can be several field combined together: "yM"(year and month)
1309*0e209d39SAndroid Build Coastguard Worker * Note:
1310*0e209d39SAndroid Build Coastguard Worker * 1 symbol field is enough for multiple symbol field (so "y" will override "yy", "yyy")
1311*0e209d39SAndroid Build Coastguard Worker * If the field is not numeric, then override has no effect (like "MMM" will use abbreviation, not numerical field)
1312*0e209d39SAndroid Build Coastguard Worker *
1313*0e209d39SAndroid Build Coastguard Worker * @param fields the fields to set
1314*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to set.
1315*0e209d39SAndroid Build Coastguard Worker * @param numberFormatToSet A pointer to the UNumberFormat to be used by fmt to format numbers.
1316*0e209d39SAndroid Build Coastguard Worker * @param status error code passed around (memory allocation or invalid fields)
1317*0e209d39SAndroid Build Coastguard Worker * @see udat_getNumberFormatForField
1318*0e209d39SAndroid Build Coastguard Worker * @stable ICU 54
1319*0e209d39SAndroid Build Coastguard Worker */
1320*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1321*0e209d39SAndroid Build Coastguard Worker udat_adoptNumberFormatForFields(  UDateFormat* fmt,
1322*0e209d39SAndroid Build Coastguard Worker                             const UChar* fields,
1323*0e209d39SAndroid Build Coastguard Worker                                   UNumberFormat*  numberFormatToSet,
1324*0e209d39SAndroid Build Coastguard Worker                                   UErrorCode* status);
1325*0e209d39SAndroid Build Coastguard Worker /**
1326*0e209d39SAndroid Build Coastguard Worker * Set the UNumberFormat associated with an UDateFormat.
1327*0e209d39SAndroid Build Coastguard Worker * A UDateFormat uses a UNumberFormat to format numbers within a date,
1328*0e209d39SAndroid Build Coastguard Worker * for example the day number.
1329*0e209d39SAndroid Build Coastguard Worker * This method also clears per field NumberFormat instances previously
1330*0e209d39SAndroid Build Coastguard Worker * set by {@see udat_setNumberFormatForField}
1331*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to set.
1332*0e209d39SAndroid Build Coastguard Worker * @param numberFormatToSet A pointer to the UNumberFormat to be used by fmt to format numbers.
1333*0e209d39SAndroid Build Coastguard Worker * @see udat_getNumberFormat
1334*0e209d39SAndroid Build Coastguard Worker * @see udat_setNumberFormatForField
1335*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1336*0e209d39SAndroid Build Coastguard Worker */
1337*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1338*0e209d39SAndroid Build Coastguard Worker udat_setNumberFormat(            UDateFormat*    fmt,
1339*0e209d39SAndroid Build Coastguard Worker                         const   UNumberFormat*  numberFormatToSet);
1340*0e209d39SAndroid Build Coastguard Worker /**
1341*0e209d39SAndroid Build Coastguard Worker * Adopt the UNumberFormat associated with an UDateFormat.
1342*0e209d39SAndroid Build Coastguard Worker * A UDateFormat uses a UNumberFormat to format numbers within a date,
1343*0e209d39SAndroid Build Coastguard Worker * for example the day number.
1344*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to set.
1345*0e209d39SAndroid Build Coastguard Worker * @param numberFormatToAdopt A pointer to the UNumberFormat to be used by fmt to format numbers.
1346*0e209d39SAndroid Build Coastguard Worker * @see udat_getNumberFormat
1347*0e209d39SAndroid Build Coastguard Worker * @stable ICU 54
1348*0e209d39SAndroid Build Coastguard Worker */
1349*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1350*0e209d39SAndroid Build Coastguard Worker udat_adoptNumberFormat(            UDateFormat*    fmt,
1351*0e209d39SAndroid Build Coastguard Worker                                    UNumberFormat*  numberFormatToAdopt);
1352*0e209d39SAndroid Build Coastguard Worker /**
1353*0e209d39SAndroid Build Coastguard Worker * Get a locale for which date/time formatting patterns are available.
1354*0e209d39SAndroid Build Coastguard Worker * A UDateFormat in a locale returned by this function will perform the correct
1355*0e209d39SAndroid Build Coastguard Worker * formatting and parsing for the locale.
1356*0e209d39SAndroid Build Coastguard Worker * @param localeIndex The index of the desired locale.
1357*0e209d39SAndroid Build Coastguard Worker * @return A locale for which date/time formatting patterns are available, or 0 if none.
1358*0e209d39SAndroid Build Coastguard Worker * @see udat_countAvailable
1359*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1360*0e209d39SAndroid Build Coastguard Worker */
1361*0e209d39SAndroid Build Coastguard Worker U_CAPI const char* U_EXPORT2
1362*0e209d39SAndroid Build Coastguard Worker udat_getAvailable(int32_t localeIndex);
1363*0e209d39SAndroid Build Coastguard Worker 
1364*0e209d39SAndroid Build Coastguard Worker /**
1365*0e209d39SAndroid Build Coastguard Worker * Determine how many locales have date/time  formatting patterns available.
1366*0e209d39SAndroid Build Coastguard Worker * This function is most useful as determining the loop ending condition for
1367*0e209d39SAndroid Build Coastguard Worker * calls to {@link #udat_getAvailable }.
1368*0e209d39SAndroid Build Coastguard Worker * @return The number of locales for which date/time formatting patterns are available.
1369*0e209d39SAndroid Build Coastguard Worker * @see udat_getAvailable
1370*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1371*0e209d39SAndroid Build Coastguard Worker */
1372*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1373*0e209d39SAndroid Build Coastguard Worker udat_countAvailable(void);
1374*0e209d39SAndroid Build Coastguard Worker 
1375*0e209d39SAndroid Build Coastguard Worker /**
1376*0e209d39SAndroid Build Coastguard Worker * Get the year relative to which all 2-digit years are interpreted.
1377*0e209d39SAndroid Build Coastguard Worker * For example, if the 2-digit start year is 2100, the year 99 will be
1378*0e209d39SAndroid Build Coastguard Worker * interpreted as 2199.
1379*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1380*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1381*0e209d39SAndroid Build Coastguard Worker * @return The year relative to which all 2-digit years are interpreted.
1382*0e209d39SAndroid Build Coastguard Worker * @see udat_Set2DigitYearStart
1383*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1384*0e209d39SAndroid Build Coastguard Worker */
1385*0e209d39SAndroid Build Coastguard Worker U_CAPI UDate U_EXPORT2
1386*0e209d39SAndroid Build Coastguard Worker udat_get2DigitYearStart(    const   UDateFormat     *fmt,
1387*0e209d39SAndroid Build Coastguard Worker                                     UErrorCode      *status);
1388*0e209d39SAndroid Build Coastguard Worker 
1389*0e209d39SAndroid Build Coastguard Worker /**
1390*0e209d39SAndroid Build Coastguard Worker * Set the year relative to which all 2-digit years will be interpreted.
1391*0e209d39SAndroid Build Coastguard Worker * For example, if the 2-digit start year is 2100, the year 99 will be
1392*0e209d39SAndroid Build Coastguard Worker * interpreted as 2199.
1393*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to set.
1394*0e209d39SAndroid Build Coastguard Worker * @param d The year relative to which all 2-digit years will be interpreted.
1395*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1396*0e209d39SAndroid Build Coastguard Worker * @see udat_Set2DigitYearStart
1397*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1398*0e209d39SAndroid Build Coastguard Worker */
1399*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1400*0e209d39SAndroid Build Coastguard Worker udat_set2DigitYearStart(    UDateFormat     *fmt,
1401*0e209d39SAndroid Build Coastguard Worker                             UDate           d,
1402*0e209d39SAndroid Build Coastguard Worker                             UErrorCode      *status);
1403*0e209d39SAndroid Build Coastguard Worker 
1404*0e209d39SAndroid Build Coastguard Worker /**
1405*0e209d39SAndroid Build Coastguard Worker * Extract the pattern from a UDateFormat.
1406*0e209d39SAndroid Build Coastguard Worker * The pattern will follow the pattern syntax rules.
1407*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1408*0e209d39SAndroid Build Coastguard Worker * @param localized true if the pattern should be localized, false otherwise.
1409*0e209d39SAndroid Build Coastguard Worker * @param result A pointer to a buffer to receive the pattern.
1410*0e209d39SAndroid Build Coastguard Worker * @param resultLength The maximum size of result.
1411*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1412*0e209d39SAndroid Build Coastguard Worker * @return The total buffer size needed; if greater than resultLength, the output was truncated.
1413*0e209d39SAndroid Build Coastguard Worker * @see udat_applyPattern
1414*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1415*0e209d39SAndroid Build Coastguard Worker */
1416*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1417*0e209d39SAndroid Build Coastguard Worker udat_toPattern(    const   UDateFormat     *fmt,
1418*0e209d39SAndroid Build Coastguard Worker                         UBool          localized,
1419*0e209d39SAndroid Build Coastguard Worker                         UChar           *result,
1420*0e209d39SAndroid Build Coastguard Worker                         int32_t         resultLength,
1421*0e209d39SAndroid Build Coastguard Worker                         UErrorCode      *status);
1422*0e209d39SAndroid Build Coastguard Worker 
1423*0e209d39SAndroid Build Coastguard Worker /**
1424*0e209d39SAndroid Build Coastguard Worker * Set the pattern used by an UDateFormat.
1425*0e209d39SAndroid Build Coastguard Worker * The pattern should follow the pattern syntax rules.
1426*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to set.
1427*0e209d39SAndroid Build Coastguard Worker * @param localized true if the pattern is localized, false otherwise.
1428*0e209d39SAndroid Build Coastguard Worker * @param pattern The new pattern
1429*0e209d39SAndroid Build Coastguard Worker * @param patternLength The length of pattern, or -1 if null-terminated.
1430*0e209d39SAndroid Build Coastguard Worker * @see udat_toPattern
1431*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1432*0e209d39SAndroid Build Coastguard Worker */
1433*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1434*0e209d39SAndroid Build Coastguard Worker udat_applyPattern(            UDateFormat     *format,
1435*0e209d39SAndroid Build Coastguard Worker                             UBool          localized,
1436*0e209d39SAndroid Build Coastguard Worker                     const   UChar           *pattern,
1437*0e209d39SAndroid Build Coastguard Worker                             int32_t         patternLength);
1438*0e209d39SAndroid Build Coastguard Worker 
1439*0e209d39SAndroid Build Coastguard Worker /**
1440*0e209d39SAndroid Build Coastguard Worker  * The possible types of date format symbols
1441*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.6
1442*0e209d39SAndroid Build Coastguard Worker  */
1443*0e209d39SAndroid Build Coastguard Worker typedef enum UDateFormatSymbolType {
1444*0e209d39SAndroid Build Coastguard Worker     /** The era names, for example AD */
1445*0e209d39SAndroid Build Coastguard Worker     UDAT_ERAS,
1446*0e209d39SAndroid Build Coastguard Worker     /** The month names, for example February */
1447*0e209d39SAndroid Build Coastguard Worker     UDAT_MONTHS,
1448*0e209d39SAndroid Build Coastguard Worker     /** The short month names, for example Feb. */
1449*0e209d39SAndroid Build Coastguard Worker     UDAT_SHORT_MONTHS,
1450*0e209d39SAndroid Build Coastguard Worker     /** The CLDR-style format "wide" weekday names, for example Monday */
1451*0e209d39SAndroid Build Coastguard Worker     UDAT_WEEKDAYS,
1452*0e209d39SAndroid Build Coastguard Worker     /**
1453*0e209d39SAndroid Build Coastguard Worker      * The CLDR-style format "abbreviated" (not "short") weekday names, for example "Mon."
1454*0e209d39SAndroid Build Coastguard Worker      * For the CLDR-style format "short" weekday names, use UDAT_SHORTER_WEEKDAYS.
1455*0e209d39SAndroid Build Coastguard Worker      */
1456*0e209d39SAndroid Build Coastguard Worker     UDAT_SHORT_WEEKDAYS,
1457*0e209d39SAndroid Build Coastguard Worker     /** The AM/PM names, for example AM */
1458*0e209d39SAndroid Build Coastguard Worker     UDAT_AM_PMS,
1459*0e209d39SAndroid Build Coastguard Worker     /** The localized characters */
1460*0e209d39SAndroid Build Coastguard Worker     UDAT_LOCALIZED_CHARS,
1461*0e209d39SAndroid Build Coastguard Worker     /** The long era names, for example Anno Domini */
1462*0e209d39SAndroid Build Coastguard Worker     UDAT_ERA_NAMES,
1463*0e209d39SAndroid Build Coastguard Worker     /** The narrow month names, for example F */
1464*0e209d39SAndroid Build Coastguard Worker     UDAT_NARROW_MONTHS,
1465*0e209d39SAndroid Build Coastguard Worker     /** The CLDR-style format "narrow" weekday names, for example "M" */
1466*0e209d39SAndroid Build Coastguard Worker     UDAT_NARROW_WEEKDAYS,
1467*0e209d39SAndroid Build Coastguard Worker     /** Standalone context versions of months */
1468*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_MONTHS,
1469*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_SHORT_MONTHS,
1470*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_NARROW_MONTHS,
1471*0e209d39SAndroid Build Coastguard Worker     /** The CLDR-style stand-alone "wide" weekday names */
1472*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_WEEKDAYS,
1473*0e209d39SAndroid Build Coastguard Worker     /**
1474*0e209d39SAndroid Build Coastguard Worker      * The CLDR-style stand-alone "abbreviated" (not "short") weekday names.
1475*0e209d39SAndroid Build Coastguard Worker      * For the CLDR-style stand-alone "short" weekday names, use UDAT_STANDALONE_SHORTER_WEEKDAYS.
1476*0e209d39SAndroid Build Coastguard Worker      */
1477*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_SHORT_WEEKDAYS,
1478*0e209d39SAndroid Build Coastguard Worker     /** The CLDR-style stand-alone "narrow" weekday names */
1479*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_NARROW_WEEKDAYS,
1480*0e209d39SAndroid Build Coastguard Worker     /** The quarters, for example 1st Quarter */
1481*0e209d39SAndroid Build Coastguard Worker     UDAT_QUARTERS,
1482*0e209d39SAndroid Build Coastguard Worker     /** The short quarter names, for example Q1 */
1483*0e209d39SAndroid Build Coastguard Worker     UDAT_SHORT_QUARTERS,
1484*0e209d39SAndroid Build Coastguard Worker     /** Standalone context versions of quarters */
1485*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_QUARTERS,
1486*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_SHORT_QUARTERS,
1487*0e209d39SAndroid Build Coastguard Worker     /**
1488*0e209d39SAndroid Build Coastguard Worker      * The CLDR-style short weekday names, e.g. "Su", Mo", etc.
1489*0e209d39SAndroid Build Coastguard Worker      * These are named "SHORTER" to contrast with the constants using _SHORT_
1490*0e209d39SAndroid Build Coastguard Worker      * above, which actually get the CLDR-style *abbreviated* versions of the
1491*0e209d39SAndroid Build Coastguard Worker      * corresponding names.
1492*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 51
1493*0e209d39SAndroid Build Coastguard Worker      */
1494*0e209d39SAndroid Build Coastguard Worker     UDAT_SHORTER_WEEKDAYS,
1495*0e209d39SAndroid Build Coastguard Worker     /**
1496*0e209d39SAndroid Build Coastguard Worker      * Standalone version of UDAT_SHORTER_WEEKDAYS.
1497*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 51
1498*0e209d39SAndroid Build Coastguard Worker      */
1499*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_SHORTER_WEEKDAYS,
1500*0e209d39SAndroid Build Coastguard Worker     /**
1501*0e209d39SAndroid Build Coastguard Worker      * Cyclic year names (only supported for some calendars, and only for FORMAT usage;
1502*0e209d39SAndroid Build Coastguard Worker      * udat_setSymbols not supported for UDAT_CYCLIC_YEARS_WIDE)
1503*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 54
1504*0e209d39SAndroid Build Coastguard Worker      */
1505*0e209d39SAndroid Build Coastguard Worker     UDAT_CYCLIC_YEARS_WIDE,
1506*0e209d39SAndroid Build Coastguard Worker     /**
1507*0e209d39SAndroid Build Coastguard Worker      * Cyclic year names (only supported for some calendars, and only for FORMAT usage)
1508*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 54
1509*0e209d39SAndroid Build Coastguard Worker      */
1510*0e209d39SAndroid Build Coastguard Worker     UDAT_CYCLIC_YEARS_ABBREVIATED,
1511*0e209d39SAndroid Build Coastguard Worker     /**
1512*0e209d39SAndroid Build Coastguard Worker      * Cyclic year names (only supported for some calendars, and only for FORMAT usage;
1513*0e209d39SAndroid Build Coastguard Worker      * udat_setSymbols not supported for UDAT_CYCLIC_YEARS_NARROW)
1514*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 54
1515*0e209d39SAndroid Build Coastguard Worker      */
1516*0e209d39SAndroid Build Coastguard Worker     UDAT_CYCLIC_YEARS_NARROW,
1517*0e209d39SAndroid Build Coastguard Worker     /**
1518*0e209d39SAndroid Build Coastguard Worker      * Calendar zodiac  names (only supported for some calendars, and only for FORMAT usage;
1519*0e209d39SAndroid Build Coastguard Worker      * udat_setSymbols not supported for UDAT_ZODIAC_NAMES_WIDE)
1520*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 54
1521*0e209d39SAndroid Build Coastguard Worker      */
1522*0e209d39SAndroid Build Coastguard Worker     UDAT_ZODIAC_NAMES_WIDE,
1523*0e209d39SAndroid Build Coastguard Worker     /**
1524*0e209d39SAndroid Build Coastguard Worker      * Calendar zodiac  names (only supported for some calendars, and only for FORMAT usage)
1525*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 54
1526*0e209d39SAndroid Build Coastguard Worker      */
1527*0e209d39SAndroid Build Coastguard Worker     UDAT_ZODIAC_NAMES_ABBREVIATED,
1528*0e209d39SAndroid Build Coastguard Worker     /**
1529*0e209d39SAndroid Build Coastguard Worker      * Calendar zodiac  names (only supported for some calendars, and only for FORMAT usage;
1530*0e209d39SAndroid Build Coastguard Worker      * udat_setSymbols not supported for UDAT_ZODIAC_NAMES_NARROW)
1531*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 54
1532*0e209d39SAndroid Build Coastguard Worker      */
1533*0e209d39SAndroid Build Coastguard Worker     UDAT_ZODIAC_NAMES_NARROW,
1534*0e209d39SAndroid Build Coastguard Worker 
1535*0e209d39SAndroid Build Coastguard Worker     /**
1536*0e209d39SAndroid Build Coastguard Worker      * The narrow quarter names, for example 1
1537*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 70
1538*0e209d39SAndroid Build Coastguard Worker      */
1539*0e209d39SAndroid Build Coastguard Worker     UDAT_NARROW_QUARTERS,
1540*0e209d39SAndroid Build Coastguard Worker 
1541*0e209d39SAndroid Build Coastguard Worker     /**
1542*0e209d39SAndroid Build Coastguard Worker      * The narrow standalone quarter names, for example 1
1543*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 70
1544*0e209d39SAndroid Build Coastguard Worker      */
1545*0e209d39SAndroid Build Coastguard Worker     UDAT_STANDALONE_NARROW_QUARTERS
1546*0e209d39SAndroid Build Coastguard Worker } UDateFormatSymbolType;
1547*0e209d39SAndroid Build Coastguard Worker 
1548*0e209d39SAndroid Build Coastguard Worker struct UDateFormatSymbols;
1549*0e209d39SAndroid Build Coastguard Worker /** Date format symbols.
1550*0e209d39SAndroid Build Coastguard Worker  *  For usage in C programs.
1551*0e209d39SAndroid Build Coastguard Worker  *  @stable ICU 2.6
1552*0e209d39SAndroid Build Coastguard Worker  */
1553*0e209d39SAndroid Build Coastguard Worker typedef struct UDateFormatSymbols UDateFormatSymbols;
1554*0e209d39SAndroid Build Coastguard Worker 
1555*0e209d39SAndroid Build Coastguard Worker /**
1556*0e209d39SAndroid Build Coastguard Worker * Get the symbols associated with an UDateFormat.
1557*0e209d39SAndroid Build Coastguard Worker * The symbols are what a UDateFormat uses to represent locale-specific data,
1558*0e209d39SAndroid Build Coastguard Worker * for example month or day names.
1559*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1560*0e209d39SAndroid Build Coastguard Worker * @param type The type of symbols to get.  One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
1561*0e209d39SAndroid Build Coastguard Worker * UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS
1562*0e209d39SAndroid Build Coastguard Worker * @param symbolIndex The desired symbol of type type.
1563*0e209d39SAndroid Build Coastguard Worker * @param result A pointer to a buffer to receive the pattern.
1564*0e209d39SAndroid Build Coastguard Worker * @param resultLength The maximum size of result.
1565*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1566*0e209d39SAndroid Build Coastguard Worker * @return The total buffer size needed; if greater than resultLength, the output was truncated.
1567*0e209d39SAndroid Build Coastguard Worker * @see udat_countSymbols
1568*0e209d39SAndroid Build Coastguard Worker * @see udat_setSymbols
1569*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1570*0e209d39SAndroid Build Coastguard Worker */
1571*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1572*0e209d39SAndroid Build Coastguard Worker udat_getSymbols(const   UDateFormat             *fmt,
1573*0e209d39SAndroid Build Coastguard Worker                         UDateFormatSymbolType   type,
1574*0e209d39SAndroid Build Coastguard Worker                         int32_t                 symbolIndex,
1575*0e209d39SAndroid Build Coastguard Worker                         UChar                   *result,
1576*0e209d39SAndroid Build Coastguard Worker                         int32_t                 resultLength,
1577*0e209d39SAndroid Build Coastguard Worker                         UErrorCode              *status);
1578*0e209d39SAndroid Build Coastguard Worker 
1579*0e209d39SAndroid Build Coastguard Worker /**
1580*0e209d39SAndroid Build Coastguard Worker * Count the number of particular symbols for an UDateFormat.
1581*0e209d39SAndroid Build Coastguard Worker * This function is most useful as for determining the loop termination condition
1582*0e209d39SAndroid Build Coastguard Worker * for calls to {@link #udat_getSymbols }.
1583*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1584*0e209d39SAndroid Build Coastguard Worker * @param type The type of symbols to count.  One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
1585*0e209d39SAndroid Build Coastguard Worker * UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS
1586*0e209d39SAndroid Build Coastguard Worker * @return The number of symbols of type type.
1587*0e209d39SAndroid Build Coastguard Worker * @see udat_getSymbols
1588*0e209d39SAndroid Build Coastguard Worker * @see udat_setSymbols
1589*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1590*0e209d39SAndroid Build Coastguard Worker */
1591*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1592*0e209d39SAndroid Build Coastguard Worker udat_countSymbols(    const    UDateFormat                *fmt,
1593*0e209d39SAndroid Build Coastguard Worker                             UDateFormatSymbolType    type);
1594*0e209d39SAndroid Build Coastguard Worker 
1595*0e209d39SAndroid Build Coastguard Worker /**
1596*0e209d39SAndroid Build Coastguard Worker * Set the symbols associated with an UDateFormat.
1597*0e209d39SAndroid Build Coastguard Worker * The symbols are what a UDateFormat uses to represent locale-specific data,
1598*0e209d39SAndroid Build Coastguard Worker * for example month or day names.
1599*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to set
1600*0e209d39SAndroid Build Coastguard Worker * @param type The type of symbols to set.  One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
1601*0e209d39SAndroid Build Coastguard Worker * UDAT_WEEKDAYS, UDAT_SHORT_WEEKDAYS, UDAT_AM_PMS, or UDAT_LOCALIZED_CHARS
1602*0e209d39SAndroid Build Coastguard Worker * @param symbolIndex The index of the symbol to set of type type.
1603*0e209d39SAndroid Build Coastguard Worker * @param value The new value
1604*0e209d39SAndroid Build Coastguard Worker * @param valueLength The length of value, or -1 if null-terminated
1605*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to an UErrorCode to receive any errors
1606*0e209d39SAndroid Build Coastguard Worker * @see udat_getSymbols
1607*0e209d39SAndroid Build Coastguard Worker * @see udat_countSymbols
1608*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0
1609*0e209d39SAndroid Build Coastguard Worker */
1610*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1611*0e209d39SAndroid Build Coastguard Worker udat_setSymbols(    UDateFormat             *format,
1612*0e209d39SAndroid Build Coastguard Worker                     UDateFormatSymbolType   type,
1613*0e209d39SAndroid Build Coastguard Worker                     int32_t                 symbolIndex,
1614*0e209d39SAndroid Build Coastguard Worker                     UChar                   *value,
1615*0e209d39SAndroid Build Coastguard Worker                     int32_t                 valueLength,
1616*0e209d39SAndroid Build Coastguard Worker                     UErrorCode              *status);
1617*0e209d39SAndroid Build Coastguard Worker 
1618*0e209d39SAndroid Build Coastguard Worker /**
1619*0e209d39SAndroid Build Coastguard Worker  * Get the locale for this date format object.
1620*0e209d39SAndroid Build Coastguard Worker  * You can choose between valid and actual locale.
1621*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to get the locale from
1622*0e209d39SAndroid Build Coastguard Worker  * @param type type of the locale we're looking for (valid or actual)
1623*0e209d39SAndroid Build Coastguard Worker  * @param status error code for the operation
1624*0e209d39SAndroid Build Coastguard Worker  * @return the locale name
1625*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.8
1626*0e209d39SAndroid Build Coastguard Worker  */
1627*0e209d39SAndroid Build Coastguard Worker U_CAPI const char* U_EXPORT2
1628*0e209d39SAndroid Build Coastguard Worker udat_getLocaleByType(const UDateFormat *fmt,
1629*0e209d39SAndroid Build Coastguard Worker                      ULocDataLocaleType type,
1630*0e209d39SAndroid Build Coastguard Worker                      UErrorCode* status);
1631*0e209d39SAndroid Build Coastguard Worker 
1632*0e209d39SAndroid Build Coastguard Worker /**
1633*0e209d39SAndroid Build Coastguard Worker  * Set a particular UDisplayContext value in the formatter, such as
1634*0e209d39SAndroid Build Coastguard Worker  * UDISPCTX_CAPITALIZATION_FOR_STANDALONE.
1635*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter for which to set a UDisplayContext value.
1636*0e209d39SAndroid Build Coastguard Worker  * @param value The UDisplayContext value to set.
1637*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1638*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 51
1639*0e209d39SAndroid Build Coastguard Worker  */
1640*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1641*0e209d39SAndroid Build Coastguard Worker udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status);
1642*0e209d39SAndroid Build Coastguard Worker 
1643*0e209d39SAndroid Build Coastguard Worker /**
1644*0e209d39SAndroid Build Coastguard Worker  * Get the formatter's UDisplayContext value for the specified UDisplayContextType,
1645*0e209d39SAndroid Build Coastguard Worker  * such as UDISPCTX_TYPE_CAPITALIZATION.
1646*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to query.
1647*0e209d39SAndroid Build Coastguard Worker  * @param type The UDisplayContextType whose value to return
1648*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
1649*0e209d39SAndroid Build Coastguard Worker  * @return The UDisplayContextValue for the specified type.
1650*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 53
1651*0e209d39SAndroid Build Coastguard Worker  */
1652*0e209d39SAndroid Build Coastguard Worker U_CAPI UDisplayContext U_EXPORT2
1653*0e209d39SAndroid Build Coastguard Worker udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* status);
1654*0e209d39SAndroid Build Coastguard Worker 
1655*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API
1656*0e209d39SAndroid Build Coastguard Worker /**
1657*0e209d39SAndroid Build Coastguard Worker * Extract the date pattern from a UDateFormat set for relative date formatting.
1658*0e209d39SAndroid Build Coastguard Worker * The pattern will follow the pattern syntax rules.
1659*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1660*0e209d39SAndroid Build Coastguard Worker * @param result A pointer to a buffer to receive the pattern.
1661*0e209d39SAndroid Build Coastguard Worker * @param resultLength The maximum size of result.
1662*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to a UErrorCode to receive any errors
1663*0e209d39SAndroid Build Coastguard Worker * @return The total buffer size needed; if greater than resultLength, the output was truncated.
1664*0e209d39SAndroid Build Coastguard Worker * @see udat_applyPatternRelative
1665*0e209d39SAndroid Build Coastguard Worker * @internal ICU 4.2 technology preview
1666*0e209d39SAndroid Build Coastguard Worker */
1667*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1668*0e209d39SAndroid Build Coastguard Worker udat_toPatternRelativeDate(const UDateFormat *fmt,
1669*0e209d39SAndroid Build Coastguard Worker                            UChar             *result,
1670*0e209d39SAndroid Build Coastguard Worker                            int32_t           resultLength,
1671*0e209d39SAndroid Build Coastguard Worker                            UErrorCode        *status);
1672*0e209d39SAndroid Build Coastguard Worker 
1673*0e209d39SAndroid Build Coastguard Worker /**
1674*0e209d39SAndroid Build Coastguard Worker * Extract the time pattern from a UDateFormat set for relative date formatting.
1675*0e209d39SAndroid Build Coastguard Worker * The pattern will follow the pattern syntax rules.
1676*0e209d39SAndroid Build Coastguard Worker * @param fmt The formatter to query.
1677*0e209d39SAndroid Build Coastguard Worker * @param result A pointer to a buffer to receive the pattern.
1678*0e209d39SAndroid Build Coastguard Worker * @param resultLength The maximum size of result.
1679*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to a UErrorCode to receive any errors
1680*0e209d39SAndroid Build Coastguard Worker * @return The total buffer size needed; if greater than resultLength, the output was truncated.
1681*0e209d39SAndroid Build Coastguard Worker * @see udat_applyPatternRelative
1682*0e209d39SAndroid Build Coastguard Worker * @internal ICU 4.2 technology preview
1683*0e209d39SAndroid Build Coastguard Worker */
1684*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
1685*0e209d39SAndroid Build Coastguard Worker udat_toPatternRelativeTime(const UDateFormat *fmt,
1686*0e209d39SAndroid Build Coastguard Worker                            UChar             *result,
1687*0e209d39SAndroid Build Coastguard Worker                            int32_t           resultLength,
1688*0e209d39SAndroid Build Coastguard Worker                            UErrorCode        *status);
1689*0e209d39SAndroid Build Coastguard Worker 
1690*0e209d39SAndroid Build Coastguard Worker /**
1691*0e209d39SAndroid Build Coastguard Worker * Set the date & time patterns used by a UDateFormat set for relative date formatting.
1692*0e209d39SAndroid Build Coastguard Worker * The patterns should follow the pattern syntax rules.
1693*0e209d39SAndroid Build Coastguard Worker * @param format The formatter to set.
1694*0e209d39SAndroid Build Coastguard Worker * @param datePattern The new date pattern
1695*0e209d39SAndroid Build Coastguard Worker * @param datePatternLength The length of datePattern, or -1 if null-terminated.
1696*0e209d39SAndroid Build Coastguard Worker * @param timePattern The new time pattern
1697*0e209d39SAndroid Build Coastguard Worker * @param timePatternLength The length of timePattern, or -1 if null-terminated.
1698*0e209d39SAndroid Build Coastguard Worker * @param status A pointer to a UErrorCode to receive any errors
1699*0e209d39SAndroid Build Coastguard Worker * @see udat_toPatternRelativeDate, udat_toPatternRelativeTime
1700*0e209d39SAndroid Build Coastguard Worker * @internal ICU 4.2 technology preview
1701*0e209d39SAndroid Build Coastguard Worker */
1702*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1703*0e209d39SAndroid Build Coastguard Worker udat_applyPatternRelative(UDateFormat *format,
1704*0e209d39SAndroid Build Coastguard Worker                           const UChar *datePattern,
1705*0e209d39SAndroid Build Coastguard Worker                           int32_t     datePatternLength,
1706*0e209d39SAndroid Build Coastguard Worker                           const UChar *timePattern,
1707*0e209d39SAndroid Build Coastguard Worker                           int32_t     timePatternLength,
1708*0e209d39SAndroid Build Coastguard Worker                           UErrorCode  *status);
1709*0e209d39SAndroid Build Coastguard Worker 
1710*0e209d39SAndroid Build Coastguard Worker /**
1711*0e209d39SAndroid Build Coastguard Worker  * @internal
1712*0e209d39SAndroid Build Coastguard Worker  * @see udat_open
1713*0e209d39SAndroid Build Coastguard Worker  */
1714*0e209d39SAndroid Build Coastguard Worker typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle  timeStyle,
1715*0e209d39SAndroid Build Coastguard Worker                                                     UDateFormatStyle  dateStyle,
1716*0e209d39SAndroid Build Coastguard Worker                                                     const char        *locale,
1717*0e209d39SAndroid Build Coastguard Worker                                                     const UChar       *tzID,
1718*0e209d39SAndroid Build Coastguard Worker                                                     int32_t           tzIDLength,
1719*0e209d39SAndroid Build Coastguard Worker                                                     const UChar       *pattern,
1720*0e209d39SAndroid Build Coastguard Worker                                                     int32_t           patternLength,
1721*0e209d39SAndroid Build Coastguard Worker                                                     UErrorCode        *status);
1722*0e209d39SAndroid Build Coastguard Worker 
1723*0e209d39SAndroid Build Coastguard Worker /**
1724*0e209d39SAndroid Build Coastguard Worker  * Register a provider factory
1725*0e209d39SAndroid Build Coastguard Worker  * @internal ICU 49
1726*0e209d39SAndroid Build Coastguard Worker  */
1727*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
1728*0e209d39SAndroid Build Coastguard Worker udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
1729*0e209d39SAndroid Build Coastguard Worker 
1730*0e209d39SAndroid Build Coastguard Worker /**
1731*0e209d39SAndroid Build Coastguard Worker  * Un-Register a provider factory
1732*0e209d39SAndroid Build Coastguard Worker  * @internal ICU 49
1733*0e209d39SAndroid Build Coastguard Worker  */
1734*0e209d39SAndroid Build Coastguard Worker U_CAPI UDateFormatOpener U_EXPORT2
1735*0e209d39SAndroid Build Coastguard Worker udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
1736*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_INTERNAL_API */
1737*0e209d39SAndroid Build Coastguard Worker 
1738*0e209d39SAndroid Build Coastguard Worker 
1739*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */
1740*0e209d39SAndroid Build Coastguard Worker 
1741*0e209d39SAndroid Build Coastguard Worker #endif
1742