xref: /aosp_15_r20/external/icu/libicu/cts_headers/reldtfmt.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) 2007-2016, International Business Machines Corporation and    *
6*0e209d39SAndroid Build Coastguard Worker * others. All Rights Reserved.                                                *
7*0e209d39SAndroid Build Coastguard Worker *******************************************************************************
8*0e209d39SAndroid Build Coastguard Worker */
9*0e209d39SAndroid Build Coastguard Worker 
10*0e209d39SAndroid Build Coastguard Worker #ifndef RELDTFMT_H
11*0e209d39SAndroid Build Coastguard Worker #define RELDTFMT_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 /**
16*0e209d39SAndroid Build Coastguard Worker  * \file
17*0e209d39SAndroid Build Coastguard Worker  * \brief C++ API: Format and parse relative dates and times.
18*0e209d39SAndroid Build Coastguard Worker  */
19*0e209d39SAndroid Build Coastguard Worker 
20*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
21*0e209d39SAndroid Build Coastguard Worker 
22*0e209d39SAndroid Build Coastguard Worker #include "unicode/datefmt.h"
23*0e209d39SAndroid Build Coastguard Worker #include "unicode/smpdtfmt.h"
24*0e209d39SAndroid Build Coastguard Worker #include "unicode/brkiter.h"
25*0e209d39SAndroid Build Coastguard Worker 
26*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
27*0e209d39SAndroid Build Coastguard Worker 
28*0e209d39SAndroid Build Coastguard Worker // forward declarations
29*0e209d39SAndroid Build Coastguard Worker class DateFormatSymbols;
30*0e209d39SAndroid Build Coastguard Worker class SimpleFormatter;
31*0e209d39SAndroid Build Coastguard Worker 
32*0e209d39SAndroid Build Coastguard Worker // internal structure used for caching strings
33*0e209d39SAndroid Build Coastguard Worker struct URelativeString;
34*0e209d39SAndroid Build Coastguard Worker 
35*0e209d39SAndroid Build Coastguard Worker /**
36*0e209d39SAndroid Build Coastguard Worker  * This class is normally accessed using the kRelative or k...Relative values of EStyle as
37*0e209d39SAndroid Build Coastguard Worker  * parameters to DateFormat::createDateInstance.
38*0e209d39SAndroid Build Coastguard Worker  *
39*0e209d39SAndroid Build Coastguard Worker  * Example:
40*0e209d39SAndroid Build Coastguard Worker  *     DateFormat *fullrelative = DateFormat::createDateInstance(DateFormat::kFullRelative, loc);
41*0e209d39SAndroid Build Coastguard Worker  *
42*0e209d39SAndroid Build Coastguard Worker  * @internal ICU 3.8
43*0e209d39SAndroid Build Coastguard Worker  */
44*0e209d39SAndroid Build Coastguard Worker 
45*0e209d39SAndroid Build Coastguard Worker class RelativeDateFormat : public DateFormat {
46*0e209d39SAndroid Build Coastguard Worker public:
47*0e209d39SAndroid Build Coastguard Worker     RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatStyle dateStyle, const Locale& locale, UErrorCode& status);
48*0e209d39SAndroid Build Coastguard Worker 
49*0e209d39SAndroid Build Coastguard Worker     // overrides
50*0e209d39SAndroid Build Coastguard Worker     /**
51*0e209d39SAndroid Build Coastguard Worker      * Copy constructor.
52*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
53*0e209d39SAndroid Build Coastguard Worker      */
54*0e209d39SAndroid Build Coastguard Worker     RelativeDateFormat(const RelativeDateFormat&);
55*0e209d39SAndroid Build Coastguard Worker 
56*0e209d39SAndroid Build Coastguard Worker     /**
57*0e209d39SAndroid Build Coastguard Worker      * Assignment operator.
58*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
59*0e209d39SAndroid Build Coastguard Worker      */
60*0e209d39SAndroid Build Coastguard Worker     RelativeDateFormat& operator=(const RelativeDateFormat&);
61*0e209d39SAndroid Build Coastguard Worker 
62*0e209d39SAndroid Build Coastguard Worker     /**
63*0e209d39SAndroid Build Coastguard Worker      * Destructor.
64*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
65*0e209d39SAndroid Build Coastguard Worker      */
66*0e209d39SAndroid Build Coastguard Worker     virtual ~RelativeDateFormat();
67*0e209d39SAndroid Build Coastguard Worker 
68*0e209d39SAndroid Build Coastguard Worker     /**
69*0e209d39SAndroid Build Coastguard Worker      * Clone this Format object polymorphically. The caller owns the result and
70*0e209d39SAndroid Build Coastguard Worker      * should delete it when done.
71*0e209d39SAndroid Build Coastguard Worker      * @return    A copy of the object.
72*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
73*0e209d39SAndroid Build Coastguard Worker      */
74*0e209d39SAndroid Build Coastguard Worker     virtual RelativeDateFormat* clone() const override;
75*0e209d39SAndroid Build Coastguard Worker 
76*0e209d39SAndroid Build Coastguard Worker     /**
77*0e209d39SAndroid Build Coastguard Worker      * Return true if the given Format objects are semantically equal. Objects
78*0e209d39SAndroid Build Coastguard Worker      * of different subclasses are considered unequal.
79*0e209d39SAndroid Build Coastguard Worker      * @param other    the object to be compared with.
80*0e209d39SAndroid Build Coastguard Worker      * @return         true if the given Format objects are semantically equal.
81*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
82*0e209d39SAndroid Build Coastguard Worker      */
83*0e209d39SAndroid Build Coastguard Worker     virtual bool operator==(const Format& other) const override;
84*0e209d39SAndroid Build Coastguard Worker 
85*0e209d39SAndroid Build Coastguard Worker 
86*0e209d39SAndroid Build Coastguard Worker     using DateFormat::format;
87*0e209d39SAndroid Build Coastguard Worker 
88*0e209d39SAndroid Build Coastguard Worker     /**
89*0e209d39SAndroid Build Coastguard Worker      * Format a date or time, which is the standard millis since 24:00 GMT, Jan
90*0e209d39SAndroid Build Coastguard Worker      * 1, 1970. Overrides DateFormat pure virtual method.
91*0e209d39SAndroid Build Coastguard Worker      * <P>
92*0e209d39SAndroid Build Coastguard Worker      * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->>
93*0e209d39SAndroid Build Coastguard Worker      * 1996.07.10 AD at 15:08:56 PDT
94*0e209d39SAndroid Build Coastguard Worker      *
95*0e209d39SAndroid Build Coastguard Worker      * @param cal       Calendar set to the date and time to be formatted
96*0e209d39SAndroid Build Coastguard Worker      *                  into a date/time string.
97*0e209d39SAndroid Build Coastguard Worker      * @param appendTo  Output parameter to receive result.
98*0e209d39SAndroid Build Coastguard Worker      *                  Result is appended to existing contents.
99*0e209d39SAndroid Build Coastguard Worker      * @param pos       The formatting position. On input: an alignment field,
100*0e209d39SAndroid Build Coastguard Worker      *                  if desired. On output: the offsets of the alignment field.
101*0e209d39SAndroid Build Coastguard Worker      * @return          Reference to 'appendTo' parameter.
102*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
103*0e209d39SAndroid Build Coastguard Worker      */
104*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString& format(  Calendar& cal,
105*0e209d39SAndroid Build Coastguard Worker                                     UnicodeString& appendTo,
106*0e209d39SAndroid Build Coastguard Worker                                     FieldPosition& pos) const override;
107*0e209d39SAndroid Build Coastguard Worker 
108*0e209d39SAndroid Build Coastguard Worker     /**
109*0e209d39SAndroid Build Coastguard Worker      * Format an object to produce a string. This method handles Formattable
110*0e209d39SAndroid Build Coastguard Worker      * objects with a UDate type. If a the Formattable object type is not a Date,
111*0e209d39SAndroid Build Coastguard Worker      * then it returns a failing UErrorCode.
112*0e209d39SAndroid Build Coastguard Worker      *
113*0e209d39SAndroid Build Coastguard Worker      * @param obj       The object to format. Must be a Date.
114*0e209d39SAndroid Build Coastguard Worker      * @param appendTo  Output parameter to receive result.
115*0e209d39SAndroid Build Coastguard Worker      *                  Result is appended to existing contents.
116*0e209d39SAndroid Build Coastguard Worker      * @param pos       On input: an alignment field, if desired.
117*0e209d39SAndroid Build Coastguard Worker      *                  On output: the offsets of the alignment field.
118*0e209d39SAndroid Build Coastguard Worker      * @param status    Output param filled with success/failure status.
119*0e209d39SAndroid Build Coastguard Worker      * @return          Reference to 'appendTo' parameter.
120*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
121*0e209d39SAndroid Build Coastguard Worker      */
122*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString& format(const Formattable& obj,
123*0e209d39SAndroid Build Coastguard Worker                                   UnicodeString& appendTo,
124*0e209d39SAndroid Build Coastguard Worker                                   FieldPosition& pos,
125*0e209d39SAndroid Build Coastguard Worker                                   UErrorCode& status) const override;
126*0e209d39SAndroid Build Coastguard Worker 
127*0e209d39SAndroid Build Coastguard Worker 
128*0e209d39SAndroid Build Coastguard Worker     /**
129*0e209d39SAndroid Build Coastguard Worker      * Parse a date/time string beginning at the given parse position. For
130*0e209d39SAndroid Build Coastguard Worker      * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
131*0e209d39SAndroid Build Coastguard Worker      * that is equivalent to Date(837039928046).
132*0e209d39SAndroid Build Coastguard Worker      * <P>
133*0e209d39SAndroid Build Coastguard Worker      * By default, parsing is lenient: If the input is not in the form used by
134*0e209d39SAndroid Build Coastguard Worker      * this object's format method but can still be parsed as a date, then the
135*0e209d39SAndroid Build Coastguard Worker      * parse succeeds. Clients may insist on strict adherence to the format by
136*0e209d39SAndroid Build Coastguard Worker      * calling setLenient(false).
137*0e209d39SAndroid Build Coastguard Worker      *
138*0e209d39SAndroid Build Coastguard Worker      * @param text  The date/time string to be parsed
139*0e209d39SAndroid Build Coastguard Worker      * @param cal   a Calendar set to the date and time to be formatted
140*0e209d39SAndroid Build Coastguard Worker      *              into a date/time string.
141*0e209d39SAndroid Build Coastguard Worker      * @param pos   On input, the position at which to start parsing; on
142*0e209d39SAndroid Build Coastguard Worker      *              output, the position at which parsing terminated, or the
143*0e209d39SAndroid Build Coastguard Worker      *              start position if the parse failed.
144*0e209d39SAndroid Build Coastguard Worker      * @return      A valid UDate if the input could be parsed.
145*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
146*0e209d39SAndroid Build Coastguard Worker      */
147*0e209d39SAndroid Build Coastguard Worker     virtual void parse( const UnicodeString& text,
148*0e209d39SAndroid Build Coastguard Worker                         Calendar& cal,
149*0e209d39SAndroid Build Coastguard Worker                         ParsePosition& pos) const override;
150*0e209d39SAndroid Build Coastguard Worker 
151*0e209d39SAndroid Build Coastguard Worker     /**
152*0e209d39SAndroid Build Coastguard Worker      * Parse a date/time string starting at the given parse position. For
153*0e209d39SAndroid Build Coastguard Worker      * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
154*0e209d39SAndroid Build Coastguard Worker      * that is equivalent to Date(837039928046).
155*0e209d39SAndroid Build Coastguard Worker      * <P>
156*0e209d39SAndroid Build Coastguard Worker      * By default, parsing is lenient: If the input is not in the form used by
157*0e209d39SAndroid Build Coastguard Worker      * this object's format method but can still be parsed as a date, then the
158*0e209d39SAndroid Build Coastguard Worker      * parse succeeds. Clients may insist on strict adherence to the format by
159*0e209d39SAndroid Build Coastguard Worker      * calling setLenient(false).
160*0e209d39SAndroid Build Coastguard Worker      *
161*0e209d39SAndroid Build Coastguard Worker      * @see DateFormat::setLenient(boolean)
162*0e209d39SAndroid Build Coastguard Worker      *
163*0e209d39SAndroid Build Coastguard Worker      * @param text  The date/time string to be parsed
164*0e209d39SAndroid Build Coastguard Worker      * @param pos   On input, the position at which to start parsing; on
165*0e209d39SAndroid Build Coastguard Worker      *              output, the position at which parsing terminated, or the
166*0e209d39SAndroid Build Coastguard Worker      *              start position if the parse failed.
167*0e209d39SAndroid Build Coastguard Worker      * @return      A valid UDate if the input could be parsed.
168*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
169*0e209d39SAndroid Build Coastguard Worker      */
170*0e209d39SAndroid Build Coastguard Worker     UDate parse( const UnicodeString& text,
171*0e209d39SAndroid Build Coastguard Worker                  ParsePosition& pos) const;
172*0e209d39SAndroid Build Coastguard Worker 
173*0e209d39SAndroid Build Coastguard Worker 
174*0e209d39SAndroid Build Coastguard Worker     /**
175*0e209d39SAndroid Build Coastguard Worker      * Parse a date/time string. For example, a time text "07/10/96 4:5 PM, PDT"
176*0e209d39SAndroid Build Coastguard Worker      * will be parsed into a UDate that is equivalent to Date(837039928046).
177*0e209d39SAndroid Build Coastguard Worker      * Parsing begins at the beginning of the string and proceeds as far as
178*0e209d39SAndroid Build Coastguard Worker      * possible.  Assuming no parse errors were encountered, this function
179*0e209d39SAndroid Build Coastguard Worker      * doesn't return any information about how much of the string was consumed
180*0e209d39SAndroid Build Coastguard Worker      * by the parsing.  If you need that information, use the version of
181*0e209d39SAndroid Build Coastguard Worker      * parse() that takes a ParsePosition.
182*0e209d39SAndroid Build Coastguard Worker      *
183*0e209d39SAndroid Build Coastguard Worker      * @param text  The date/time string to be parsed
184*0e209d39SAndroid Build Coastguard Worker      * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with
185*0e209d39SAndroid Build Coastguard Worker      *              an error value if there was a parse error.
186*0e209d39SAndroid Build Coastguard Worker      * @return      A valid UDate if the input could be parsed.
187*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
188*0e209d39SAndroid Build Coastguard Worker      */
189*0e209d39SAndroid Build Coastguard Worker     virtual UDate parse( const UnicodeString& text,
190*0e209d39SAndroid Build Coastguard Worker                         UErrorCode& status) const override;
191*0e209d39SAndroid Build Coastguard Worker 
192*0e209d39SAndroid Build Coastguard Worker     /**
193*0e209d39SAndroid Build Coastguard Worker      * Return a single pattern string generated by combining the patterns for the
194*0e209d39SAndroid Build Coastguard Worker      * date and time formatters associated with this object.
195*0e209d39SAndroid Build Coastguard Worker      * @param result Output param to receive the pattern.
196*0e209d39SAndroid Build Coastguard Worker      * @return       A reference to 'result'.
197*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 4.2 technology preview
198*0e209d39SAndroid Build Coastguard Worker      */
199*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString& toPattern(UnicodeString& result, UErrorCode& status) const;
200*0e209d39SAndroid Build Coastguard Worker 
201*0e209d39SAndroid Build Coastguard Worker     /**
202*0e209d39SAndroid Build Coastguard Worker      * Get the date pattern for the the date formatter associated with this object.
203*0e209d39SAndroid Build Coastguard Worker      * @param result Output param to receive the date pattern.
204*0e209d39SAndroid Build Coastguard Worker      * @return       A reference to 'result'.
205*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 4.2 technology preview
206*0e209d39SAndroid Build Coastguard Worker      */
207*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString& toPatternDate(UnicodeString& result, UErrorCode& status) const;
208*0e209d39SAndroid Build Coastguard Worker 
209*0e209d39SAndroid Build Coastguard Worker     /**
210*0e209d39SAndroid Build Coastguard Worker      * Get the time pattern for the the time formatter associated with this object.
211*0e209d39SAndroid Build Coastguard Worker      * @param result Output param to receive the time pattern.
212*0e209d39SAndroid Build Coastguard Worker      * @return       A reference to 'result'.
213*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 4.2 technology preview
214*0e209d39SAndroid Build Coastguard Worker      */
215*0e209d39SAndroid Build Coastguard Worker     virtual UnicodeString& toPatternTime(UnicodeString& result, UErrorCode& status) const;
216*0e209d39SAndroid Build Coastguard Worker 
217*0e209d39SAndroid Build Coastguard Worker     /**
218*0e209d39SAndroid Build Coastguard Worker      * Apply the given unlocalized date & time pattern strings to this relative date format.
219*0e209d39SAndroid Build Coastguard Worker      * (i.e., after this call, this formatter will format dates and times according to
220*0e209d39SAndroid Build Coastguard Worker      * the new patterns)
221*0e209d39SAndroid Build Coastguard Worker      *
222*0e209d39SAndroid Build Coastguard Worker      * @param datePattern   The date pattern to be applied.
223*0e209d39SAndroid Build Coastguard Worker      * @param timePattern   The time pattern to be applied.
224*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 4.2 technology preview
225*0e209d39SAndroid Build Coastguard Worker      */
226*0e209d39SAndroid Build Coastguard Worker     virtual void applyPatterns(const UnicodeString& datePattern, const UnicodeString& timePattern, UErrorCode &status);
227*0e209d39SAndroid Build Coastguard Worker 
228*0e209d39SAndroid Build Coastguard Worker     /**
229*0e209d39SAndroid Build Coastguard Worker      * Gets the date/time formatting symbols (this is an object carrying
230*0e209d39SAndroid Build Coastguard Worker      * the various strings and other symbols used in formatting: e.g., month
231*0e209d39SAndroid Build Coastguard Worker      * names and abbreviations, time zone names, AM/PM strings, etc.)
232*0e209d39SAndroid Build Coastguard Worker      * @return a copy of the date-time formatting data associated
233*0e209d39SAndroid Build Coastguard Worker      * with this date-time formatter.
234*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 4.8
235*0e209d39SAndroid Build Coastguard Worker      */
236*0e209d39SAndroid Build Coastguard Worker     virtual const DateFormatSymbols* getDateFormatSymbols() const;
237*0e209d39SAndroid Build Coastguard Worker 
238*0e209d39SAndroid Build Coastguard Worker     /**
239*0e209d39SAndroid Build Coastguard Worker      * Set a particular UDisplayContext value in the formatter, such as
240*0e209d39SAndroid Build Coastguard Worker      * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. Note: For getContext, see
241*0e209d39SAndroid Build Coastguard Worker      * DateFormat.
242*0e209d39SAndroid Build Coastguard Worker      * @param value The UDisplayContext value to set.
243*0e209d39SAndroid Build Coastguard Worker      * @param status Input/output status. If at entry this indicates a failure
244*0e209d39SAndroid Build Coastguard Worker      *               status, the function will do nothing; otherwise this will be
245*0e209d39SAndroid Build Coastguard Worker      *               updated with any new status from the function.
246*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 53
247*0e209d39SAndroid Build Coastguard Worker      */
248*0e209d39SAndroid Build Coastguard Worker     virtual void setContext(UDisplayContext value, UErrorCode& status) override;
249*0e209d39SAndroid Build Coastguard Worker 
250*0e209d39SAndroid Build Coastguard Worker private:
251*0e209d39SAndroid Build Coastguard Worker     SimpleDateFormat *fDateTimeFormatter;
252*0e209d39SAndroid Build Coastguard Worker     UnicodeString fDatePattern;
253*0e209d39SAndroid Build Coastguard Worker     UnicodeString fTimePattern;
254*0e209d39SAndroid Build Coastguard Worker     SimpleFormatter *fCombinedFormat;  // the {0} {1} format.
255*0e209d39SAndroid Build Coastguard Worker 
256*0e209d39SAndroid Build Coastguard Worker     UDateFormatStyle fDateStyle;
257*0e209d39SAndroid Build Coastguard Worker     Locale  fLocale;
258*0e209d39SAndroid Build Coastguard Worker 
259*0e209d39SAndroid Build Coastguard Worker     int32_t fDatesLen;    // Length of array
260*0e209d39SAndroid Build Coastguard Worker     URelativeString *fDates; // array of strings
261*0e209d39SAndroid Build Coastguard Worker 
262*0e209d39SAndroid Build Coastguard Worker     UBool fCombinedHasDateAtStart;
263*0e209d39SAndroid Build Coastguard Worker     UBool fCapitalizationInfoSet;
264*0e209d39SAndroid Build Coastguard Worker     UBool fCapitalizationOfRelativeUnitsForUIListMenu;
265*0e209d39SAndroid Build Coastguard Worker     UBool fCapitalizationOfRelativeUnitsForStandAlone;
266*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION
267*0e209d39SAndroid Build Coastguard Worker     BreakIterator* fCapitalizationBrkIter;
268*0e209d39SAndroid Build Coastguard Worker #else
269*0e209d39SAndroid Build Coastguard Worker     UObject* fCapitalizationBrkIter;
270*0e209d39SAndroid Build Coastguard Worker #endif
271*0e209d39SAndroid Build Coastguard Worker 
272*0e209d39SAndroid Build Coastguard Worker     /**
273*0e209d39SAndroid Build Coastguard Worker      * Get the string at a specific offset.
274*0e209d39SAndroid Build Coastguard Worker      * @param day day offset ( -1, 0, 1, etc.. )
275*0e209d39SAndroid Build Coastguard Worker      * @param len on output, length of string.
276*0e209d39SAndroid Build Coastguard Worker      * @return the string, or nullptr if none at that location.
277*0e209d39SAndroid Build Coastguard Worker      */
278*0e209d39SAndroid Build Coastguard Worker     const char16_t *getStringForDay(int32_t day, int32_t &len, UErrorCode &status) const;
279*0e209d39SAndroid Build Coastguard Worker 
280*0e209d39SAndroid Build Coastguard Worker     /**
281*0e209d39SAndroid Build Coastguard Worker      * Load the Date string array
282*0e209d39SAndroid Build Coastguard Worker      */
283*0e209d39SAndroid Build Coastguard Worker     void loadDates(UErrorCode &status);
284*0e209d39SAndroid Build Coastguard Worker 
285*0e209d39SAndroid Build Coastguard Worker     /**
286*0e209d39SAndroid Build Coastguard Worker      * Set fCapitalizationOfRelativeUnitsForUIListMenu, fCapitalizationOfRelativeUnitsForStandAlone
287*0e209d39SAndroid Build Coastguard Worker      */
288*0e209d39SAndroid Build Coastguard Worker     void initCapitalizationContextInfo(const Locale& thelocale);
289*0e209d39SAndroid Build Coastguard Worker 
290*0e209d39SAndroid Build Coastguard Worker     /**
291*0e209d39SAndroid Build Coastguard Worker      * @return the number of days in "until-now"
292*0e209d39SAndroid Build Coastguard Worker      */
293*0e209d39SAndroid Build Coastguard Worker     static int32_t dayDifference(Calendar &until, UErrorCode &status);
294*0e209d39SAndroid Build Coastguard Worker 
295*0e209d39SAndroid Build Coastguard Worker     /**
296*0e209d39SAndroid Build Coastguard Worker      * initializes fCalendar from parameters.  Returns fCalendar as a convenience.
297*0e209d39SAndroid Build Coastguard Worker      * @param adoptZone  Zone to be adopted, or nullptr for TimeZone::createDefault().
298*0e209d39SAndroid Build Coastguard Worker      * @param locale Locale of the calendar
299*0e209d39SAndroid Build Coastguard Worker      * @param status Error code
300*0e209d39SAndroid Build Coastguard Worker      * @return the newly constructed fCalendar
301*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
302*0e209d39SAndroid Build Coastguard Worker      */
303*0e209d39SAndroid Build Coastguard Worker     Calendar* initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
304*0e209d39SAndroid Build Coastguard Worker 
305*0e209d39SAndroid Build Coastguard Worker public:
306*0e209d39SAndroid Build Coastguard Worker     /**
307*0e209d39SAndroid Build Coastguard Worker      * Return the class ID for this class. This is useful only for comparing to
308*0e209d39SAndroid Build Coastguard Worker      * a return value from getDynamicClassID(). For example:
309*0e209d39SAndroid Build Coastguard Worker      * <pre>
310*0e209d39SAndroid Build Coastguard Worker      * .   Base* polymorphic_pointer = createPolymorphicObject();
311*0e209d39SAndroid Build Coastguard Worker      * .   if (polymorphic_pointer->getDynamicClassID() ==
312*0e209d39SAndroid Build Coastguard Worker      * .       erived::getStaticClassID()) ...
313*0e209d39SAndroid Build Coastguard Worker      * </pre>
314*0e209d39SAndroid Build Coastguard Worker      * @return          The class ID for all objects of this class.
315*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
316*0e209d39SAndroid Build Coastguard Worker      */
317*0e209d39SAndroid Build Coastguard Worker     U_I18N_API static UClassID U_EXPORT2 getStaticClassID();
318*0e209d39SAndroid Build Coastguard Worker 
319*0e209d39SAndroid Build Coastguard Worker     /**
320*0e209d39SAndroid Build Coastguard Worker      * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This
321*0e209d39SAndroid Build Coastguard Worker      * method is to implement a simple version of RTTI, since not all C++
322*0e209d39SAndroid Build Coastguard Worker      * compilers support genuine RTTI. Polymorphic operator==() and clone()
323*0e209d39SAndroid Build Coastguard Worker      * methods call this method.
324*0e209d39SAndroid Build Coastguard Worker      *
325*0e209d39SAndroid Build Coastguard Worker      * @return          The class ID for this object. All objects of a
326*0e209d39SAndroid Build Coastguard Worker      *                  given class have the same class ID.  Objects of
327*0e209d39SAndroid Build Coastguard Worker      *                  other classes have different class IDs.
328*0e209d39SAndroid Build Coastguard Worker      * @internal ICU 3.8
329*0e209d39SAndroid Build Coastguard Worker      */
330*0e209d39SAndroid Build Coastguard Worker     virtual UClassID getDynamicClassID() const override;
331*0e209d39SAndroid Build Coastguard Worker };
332*0e209d39SAndroid Build Coastguard Worker 
333*0e209d39SAndroid Build Coastguard Worker 
334*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
335*0e209d39SAndroid Build Coastguard Worker 
336*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */
337*0e209d39SAndroid Build Coastguard Worker 
338*0e209d39SAndroid Build Coastguard Worker #endif // RELDTFMT_H
339