xref: /aosp_15_r20/external/icu/libicu/cts_headers/unicode/ureldatefmt.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) 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 URELDATEFMT_H
11*0e209d39SAndroid Build Coastguard Worker #define URELDATEFMT_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/unum.h"
18*0e209d39SAndroid Build Coastguard Worker #include "unicode/udisplaycontext.h"
19*0e209d39SAndroid Build Coastguard Worker #include "unicode/uformattedvalue.h"
20*0e209d39SAndroid Build Coastguard Worker 
21*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
22*0e209d39SAndroid Build Coastguard Worker #include "unicode/localpointer.h"
23*0e209d39SAndroid Build Coastguard Worker #endif   // U_SHOW_CPLUSPLUS_API
24*0e209d39SAndroid Build Coastguard Worker 
25*0e209d39SAndroid Build Coastguard Worker /**
26*0e209d39SAndroid Build Coastguard Worker  * \file
27*0e209d39SAndroid Build Coastguard Worker  * \brief C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset.
28*0e209d39SAndroid Build Coastguard Worker  *
29*0e209d39SAndroid Build Coastguard Worker  * Provides simple formatting of relative dates, in two ways
30*0e209d39SAndroid Build Coastguard Worker  * <ul>
31*0e209d39SAndroid Build Coastguard Worker  *   <li>relative dates with a quantity e.g "in 5 days"</li>
32*0e209d39SAndroid Build Coastguard Worker  *   <li>relative dates without a quantity e.g "next Tuesday"</li>
33*0e209d39SAndroid Build Coastguard Worker  * </ul>
34*0e209d39SAndroid Build Coastguard Worker  * <p>
35*0e209d39SAndroid Build Coastguard Worker  * This does not provide compound formatting for multiple units,
36*0e209d39SAndroid Build Coastguard Worker  * other than the ability to combine a time string with a relative date,
37*0e209d39SAndroid Build Coastguard Worker  * as in "next Tuesday at 3:45 PM". It also does not provide support
38*0e209d39SAndroid Build Coastguard Worker  * for determining which unit to use, such as deciding between "in 7 days"
39*0e209d39SAndroid Build Coastguard Worker  * and "in 1 week".
40*0e209d39SAndroid Build Coastguard Worker  *
41*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
42*0e209d39SAndroid Build Coastguard Worker  */
43*0e209d39SAndroid Build Coastguard Worker 
44*0e209d39SAndroid Build Coastguard Worker /**
45*0e209d39SAndroid Build Coastguard Worker  * The formatting style
46*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 54
47*0e209d39SAndroid Build Coastguard Worker  */
48*0e209d39SAndroid Build Coastguard Worker typedef enum UDateRelativeDateTimeFormatterStyle {
49*0e209d39SAndroid Build Coastguard Worker   /**
50*0e209d39SAndroid Build Coastguard Worker    * Everything spelled out.
51*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 54
52*0e209d39SAndroid Build Coastguard Worker    */
53*0e209d39SAndroid Build Coastguard Worker   UDAT_STYLE_LONG,
54*0e209d39SAndroid Build Coastguard Worker 
55*0e209d39SAndroid Build Coastguard Worker   /**
56*0e209d39SAndroid Build Coastguard Worker    * Abbreviations used when possible.
57*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 54
58*0e209d39SAndroid Build Coastguard Worker    */
59*0e209d39SAndroid Build Coastguard Worker   UDAT_STYLE_SHORT,
60*0e209d39SAndroid Build Coastguard Worker 
61*0e209d39SAndroid Build Coastguard Worker   /**
62*0e209d39SAndroid Build Coastguard Worker    * Use the shortest possible form.
63*0e209d39SAndroid Build Coastguard Worker    * @stable ICU 54
64*0e209d39SAndroid Build Coastguard Worker    */
65*0e209d39SAndroid Build Coastguard Worker   UDAT_STYLE_NARROW,
66*0e209d39SAndroid Build Coastguard Worker 
67*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
68*0e209d39SAndroid Build Coastguard Worker     /**
69*0e209d39SAndroid Build Coastguard Worker      * One more than the highest normal UDateRelativeDateTimeFormatterStyle value.
70*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
71*0e209d39SAndroid Build Coastguard Worker      */
72*0e209d39SAndroid Build Coastguard Worker     UDAT_STYLE_COUNT
73*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_DEPRECATED_API */
74*0e209d39SAndroid Build Coastguard Worker } UDateRelativeDateTimeFormatterStyle;
75*0e209d39SAndroid Build Coastguard Worker 
76*0e209d39SAndroid Build Coastguard Worker /**
77*0e209d39SAndroid Build Coastguard Worker  * Represents the unit for formatting a relative date. e.g "in 5 days"
78*0e209d39SAndroid Build Coastguard Worker  * or "next year"
79*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
80*0e209d39SAndroid Build Coastguard Worker  */
81*0e209d39SAndroid Build Coastguard Worker typedef enum URelativeDateTimeUnit {
82*0e209d39SAndroid Build Coastguard Worker     /**
83*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is year, e.g. "last year",
84*0e209d39SAndroid Build Coastguard Worker      * "in 5 years".
85*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
86*0e209d39SAndroid Build Coastguard Worker      */
87*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_YEAR,
88*0e209d39SAndroid Build Coastguard Worker     /**
89*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is quarter, e.g. "last quarter",
90*0e209d39SAndroid Build Coastguard Worker      * "in 5 quarters".
91*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
92*0e209d39SAndroid Build Coastguard Worker      */
93*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_QUARTER,
94*0e209d39SAndroid Build Coastguard Worker     /**
95*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is month, e.g. "last month",
96*0e209d39SAndroid Build Coastguard Worker      * "in 5 months".
97*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
98*0e209d39SAndroid Build Coastguard Worker      */
99*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_MONTH,
100*0e209d39SAndroid Build Coastguard Worker     /**
101*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is week, e.g. "last week",
102*0e209d39SAndroid Build Coastguard Worker      * "in 5 weeks".
103*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
104*0e209d39SAndroid Build Coastguard Worker      */
105*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_WEEK,
106*0e209d39SAndroid Build Coastguard Worker     /**
107*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is day, e.g. "yesterday",
108*0e209d39SAndroid Build Coastguard Worker      * "in 5 days".
109*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
110*0e209d39SAndroid Build Coastguard Worker      */
111*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_DAY,
112*0e209d39SAndroid Build Coastguard Worker     /**
113*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is hour, e.g. "1 hour ago",
114*0e209d39SAndroid Build Coastguard Worker      * "in 5 hours".
115*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
116*0e209d39SAndroid Build Coastguard Worker      */
117*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_HOUR,
118*0e209d39SAndroid Build Coastguard Worker     /**
119*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is minute, e.g. "1 minute ago",
120*0e209d39SAndroid Build Coastguard Worker      * "in 5 minutes".
121*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
122*0e209d39SAndroid Build Coastguard Worker      */
123*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_MINUTE,
124*0e209d39SAndroid Build Coastguard Worker     /**
125*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is second, e.g. "1 second ago",
126*0e209d39SAndroid Build Coastguard Worker      * "in 5 seconds".
127*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
128*0e209d39SAndroid Build Coastguard Worker      */
129*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_SECOND,
130*0e209d39SAndroid Build Coastguard Worker     /**
131*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Sunday, e.g. "last Sunday",
132*0e209d39SAndroid Build Coastguard Worker      * "this Sunday", "next Sunday", "in 5 Sundays".
133*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
134*0e209d39SAndroid Build Coastguard Worker      */
135*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_SUNDAY,
136*0e209d39SAndroid Build Coastguard Worker     /**
137*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Monday, e.g. "last Monday",
138*0e209d39SAndroid Build Coastguard Worker      * "this Monday", "next Monday", "in 5 Mondays".
139*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
140*0e209d39SAndroid Build Coastguard Worker      */
141*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_MONDAY,
142*0e209d39SAndroid Build Coastguard Worker     /**
143*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Tuesday, e.g. "last Tuesday",
144*0e209d39SAndroid Build Coastguard Worker      * "this Tuesday", "next Tuesday", "in 5 Tuesdays".
145*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
146*0e209d39SAndroid Build Coastguard Worker      */
147*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_TUESDAY,
148*0e209d39SAndroid Build Coastguard Worker     /**
149*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Wednesday, e.g. "last Wednesday",
150*0e209d39SAndroid Build Coastguard Worker      * "this Wednesday", "next Wednesday", "in 5 Wednesdays".
151*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
152*0e209d39SAndroid Build Coastguard Worker      */
153*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_WEDNESDAY,
154*0e209d39SAndroid Build Coastguard Worker     /**
155*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Thursday, e.g. "last Thursday",
156*0e209d39SAndroid Build Coastguard Worker      * "this Thursday", "next Thursday", "in 5 Thursdays".
157*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
158*0e209d39SAndroid Build Coastguard Worker      */
159*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_THURSDAY,
160*0e209d39SAndroid Build Coastguard Worker     /**
161*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Friday, e.g. "last Friday",
162*0e209d39SAndroid Build Coastguard Worker      * "this Friday", "next Friday", "in 5 Fridays".
163*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
164*0e209d39SAndroid Build Coastguard Worker      */
165*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_FRIDAY,
166*0e209d39SAndroid Build Coastguard Worker     /**
167*0e209d39SAndroid Build Coastguard Worker      * Specifies that relative unit is Saturday, e.g. "last Saturday",
168*0e209d39SAndroid Build Coastguard Worker      * "this Saturday", "next Saturday", "in 5 Saturdays".
169*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 57
170*0e209d39SAndroid Build Coastguard Worker      */
171*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_SATURDAY,
172*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API
173*0e209d39SAndroid Build Coastguard Worker     /**
174*0e209d39SAndroid Build Coastguard Worker      * One more than the highest normal URelativeDateTimeUnit value.
175*0e209d39SAndroid Build Coastguard Worker      * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
176*0e209d39SAndroid Build Coastguard Worker      */
177*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_UNIT_COUNT
178*0e209d39SAndroid Build Coastguard Worker #endif  /* U_HIDE_DEPRECATED_API */
179*0e209d39SAndroid Build Coastguard Worker } URelativeDateTimeUnit;
180*0e209d39SAndroid Build Coastguard Worker 
181*0e209d39SAndroid Build Coastguard Worker /**
182*0e209d39SAndroid Build Coastguard Worker  * FieldPosition and UFieldPosition selectors for format fields
183*0e209d39SAndroid Build Coastguard Worker  * defined by RelativeDateTimeFormatter.
184*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
185*0e209d39SAndroid Build Coastguard Worker  */
186*0e209d39SAndroid Build Coastguard Worker typedef enum URelativeDateTimeFormatterField {
187*0e209d39SAndroid Build Coastguard Worker     /**
188*0e209d39SAndroid Build Coastguard Worker      * Represents a literal text string, like "tomorrow" or "days ago".
189*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 64
190*0e209d39SAndroid Build Coastguard Worker      */
191*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_LITERAL_FIELD,
192*0e209d39SAndroid Build Coastguard Worker     /**
193*0e209d39SAndroid Build Coastguard Worker      * Represents a number quantity, like "3" in "3 days ago".
194*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 64
195*0e209d39SAndroid Build Coastguard Worker      */
196*0e209d39SAndroid Build Coastguard Worker     UDAT_REL_NUMERIC_FIELD,
197*0e209d39SAndroid Build Coastguard Worker } URelativeDateTimeFormatterField;
198*0e209d39SAndroid Build Coastguard Worker 
199*0e209d39SAndroid Build Coastguard Worker 
200*0e209d39SAndroid Build Coastguard Worker /**
201*0e209d39SAndroid Build Coastguard Worker  * Opaque URelativeDateTimeFormatter object for use in C programs.
202*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
203*0e209d39SAndroid Build Coastguard Worker  */
204*0e209d39SAndroid Build Coastguard Worker struct URelativeDateTimeFormatter;
205*0e209d39SAndroid Build Coastguard Worker typedef struct URelativeDateTimeFormatter URelativeDateTimeFormatter;  /**< C typedef for struct URelativeDateTimeFormatter. @stable ICU 57 */
206*0e209d39SAndroid Build Coastguard Worker 
207*0e209d39SAndroid Build Coastguard Worker 
208*0e209d39SAndroid Build Coastguard Worker /**
209*0e209d39SAndroid Build Coastguard Worker  * Open a new URelativeDateTimeFormatter object for a given locale using the
210*0e209d39SAndroid Build Coastguard Worker  * specified width and capitalizationContext, along with a number formatter
211*0e209d39SAndroid Build Coastguard Worker  * (if desired) to override the default formatter that would be used for
212*0e209d39SAndroid Build Coastguard Worker  * display of numeric field offsets. The default formatter typically rounds
213*0e209d39SAndroid Build Coastguard Worker  * toward 0 and has a minimum of 0 fraction digits and a maximum of 3
214*0e209d39SAndroid Build Coastguard Worker  * fraction digits (i.e. it will show as many decimal places as necessary
215*0e209d39SAndroid Build Coastguard Worker  * up to 3, without showing trailing 0s).
216*0e209d39SAndroid Build Coastguard Worker  *
217*0e209d39SAndroid Build Coastguard Worker  * @param locale
218*0e209d39SAndroid Build Coastguard Worker  *          The locale
219*0e209d39SAndroid Build Coastguard Worker  * @param nfToAdopt
220*0e209d39SAndroid Build Coastguard Worker  *          A number formatter to set for this URelativeDateTimeFormatter
221*0e209d39SAndroid Build Coastguard Worker  *          object (instead of the default decimal formatter). Ownership of
222*0e209d39SAndroid Build Coastguard Worker  *          this UNumberFormat object will pass to the URelativeDateTimeFormatter
223*0e209d39SAndroid Build Coastguard Worker  *          object (the URelativeDateTimeFormatter adopts the UNumberFormat),
224*0e209d39SAndroid Build Coastguard Worker  *          which becomes responsible for closing it. If the caller wishes to
225*0e209d39SAndroid Build Coastguard Worker  *          retain ownership of the UNumberFormat object, the caller must clone
226*0e209d39SAndroid Build Coastguard Worker  *          it (with unum_clone) and pass the clone to ureldatefmt_open. May be
227*0e209d39SAndroid Build Coastguard Worker  *          NULL to use the default decimal formatter.
228*0e209d39SAndroid Build Coastguard Worker  * @param width
229*0e209d39SAndroid Build Coastguard Worker  *          The width - wide, short, narrow, etc.
230*0e209d39SAndroid Build Coastguard Worker  * @param capitalizationContext
231*0e209d39SAndroid Build Coastguard Worker  *          A value from UDisplayContext that pertains to capitalization, e.g.
232*0e209d39SAndroid Build Coastguard Worker  *          UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE.
233*0e209d39SAndroid Build Coastguard Worker  * @param status
234*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UErrorCode to receive any errors.
235*0e209d39SAndroid Build Coastguard Worker  * @return
236*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a URelativeDateTimeFormatter object for the specified locale,
237*0e209d39SAndroid Build Coastguard Worker  *          or NULL if an error occurred.
238*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
239*0e209d39SAndroid Build Coastguard Worker  */
240*0e209d39SAndroid Build Coastguard Worker U_CAPI URelativeDateTimeFormatter* U_EXPORT2
241*0e209d39SAndroid Build Coastguard Worker ureldatefmt_open( const char*          locale,
242*0e209d39SAndroid Build Coastguard Worker                   UNumberFormat*       nfToAdopt,
243*0e209d39SAndroid Build Coastguard Worker                   UDateRelativeDateTimeFormatterStyle width,
244*0e209d39SAndroid Build Coastguard Worker                   UDisplayContext      capitalizationContext,
245*0e209d39SAndroid Build Coastguard Worker                   UErrorCode*          status );
246*0e209d39SAndroid Build Coastguard Worker 
247*0e209d39SAndroid Build Coastguard Worker /**
248*0e209d39SAndroid Build Coastguard Worker  * Close a URelativeDateTimeFormatter object. Once closed it may no longer be used.
249*0e209d39SAndroid Build Coastguard Worker  * @param reldatefmt
250*0e209d39SAndroid Build Coastguard Worker  *            The URelativeDateTimeFormatter object to close.
251*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
252*0e209d39SAndroid Build Coastguard Worker  */
253*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
254*0e209d39SAndroid Build Coastguard Worker ureldatefmt_close(URelativeDateTimeFormatter *reldatefmt);
255*0e209d39SAndroid Build Coastguard Worker 
256*0e209d39SAndroid Build Coastguard Worker struct UFormattedRelativeDateTime;
257*0e209d39SAndroid Build Coastguard Worker /**
258*0e209d39SAndroid Build Coastguard Worker  * Opaque struct to contain the results of a URelativeDateTimeFormatter operation.
259*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
260*0e209d39SAndroid Build Coastguard Worker  */
261*0e209d39SAndroid Build Coastguard Worker typedef struct UFormattedRelativeDateTime UFormattedRelativeDateTime;
262*0e209d39SAndroid Build Coastguard Worker 
263*0e209d39SAndroid Build Coastguard Worker /**
264*0e209d39SAndroid Build Coastguard Worker  * Creates an object to hold the result of a URelativeDateTimeFormatter
265*0e209d39SAndroid Build Coastguard Worker  * operation. The object can be used repeatedly; it is cleared whenever
266*0e209d39SAndroid Build Coastguard Worker  * passed to a format function.
267*0e209d39SAndroid Build Coastguard Worker  *
268*0e209d39SAndroid Build Coastguard Worker  * @param ec Set if an error occurs.
269*0e209d39SAndroid Build Coastguard Worker  * @return A pointer needing ownership.
270*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
271*0e209d39SAndroid Build Coastguard Worker  */
272*0e209d39SAndroid Build Coastguard Worker U_CAPI UFormattedRelativeDateTime* U_EXPORT2
273*0e209d39SAndroid Build Coastguard Worker ureldatefmt_openResult(UErrorCode* ec);
274*0e209d39SAndroid Build Coastguard Worker 
275*0e209d39SAndroid Build Coastguard Worker /**
276*0e209d39SAndroid Build Coastguard Worker  * Returns a representation of a UFormattedRelativeDateTime as a UFormattedValue,
277*0e209d39SAndroid Build Coastguard Worker  * which can be subsequently passed to any API requiring that type.
278*0e209d39SAndroid Build Coastguard Worker  *
279*0e209d39SAndroid Build Coastguard Worker  * The returned object is owned by the UFormattedRelativeDateTime and is valid
280*0e209d39SAndroid Build Coastguard Worker  * only as long as the UFormattedRelativeDateTime is present and unchanged in memory.
281*0e209d39SAndroid Build Coastguard Worker  *
282*0e209d39SAndroid Build Coastguard Worker  * You can think of this method as a cast between types.
283*0e209d39SAndroid Build Coastguard Worker  *
284*0e209d39SAndroid Build Coastguard Worker  * @param ufrdt The object containing the formatted string.
285*0e209d39SAndroid Build Coastguard Worker  * @param ec Set if an error occurs.
286*0e209d39SAndroid Build Coastguard Worker  * @return A UFormattedValue owned by the input object.
287*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
288*0e209d39SAndroid Build Coastguard Worker  */
289*0e209d39SAndroid Build Coastguard Worker U_CAPI const UFormattedValue* U_EXPORT2
290*0e209d39SAndroid Build Coastguard Worker ureldatefmt_resultAsValue(const UFormattedRelativeDateTime* ufrdt, UErrorCode* ec);
291*0e209d39SAndroid Build Coastguard Worker 
292*0e209d39SAndroid Build Coastguard Worker /**
293*0e209d39SAndroid Build Coastguard Worker  * Releases the UFormattedRelativeDateTime created by ureldatefmt_openResult.
294*0e209d39SAndroid Build Coastguard Worker  *
295*0e209d39SAndroid Build Coastguard Worker  * @param ufrdt The object to release.
296*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
297*0e209d39SAndroid Build Coastguard Worker  */
298*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
299*0e209d39SAndroid Build Coastguard Worker ureldatefmt_closeResult(UFormattedRelativeDateTime* ufrdt);
300*0e209d39SAndroid Build Coastguard Worker 
301*0e209d39SAndroid Build Coastguard Worker 
302*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
303*0e209d39SAndroid Build Coastguard Worker 
304*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
305*0e209d39SAndroid Build Coastguard Worker 
306*0e209d39SAndroid Build Coastguard Worker /**
307*0e209d39SAndroid Build Coastguard Worker  * \class LocalURelativeDateTimeFormatterPointer
308*0e209d39SAndroid Build Coastguard Worker  * "Smart pointer" class, closes a URelativeDateTimeFormatter via ureldatefmt_close().
309*0e209d39SAndroid Build Coastguard Worker  * For most methods see the LocalPointerBase base class.
310*0e209d39SAndroid Build Coastguard Worker  *
311*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointerBase
312*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointer
313*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
314*0e209d39SAndroid Build Coastguard Worker  */
315*0e209d39SAndroid Build Coastguard Worker U_DEFINE_LOCAL_OPEN_POINTER(LocalURelativeDateTimeFormatterPointer, URelativeDateTimeFormatter, ureldatefmt_close);
316*0e209d39SAndroid Build Coastguard Worker 
317*0e209d39SAndroid Build Coastguard Worker /**
318*0e209d39SAndroid Build Coastguard Worker  * \class LocalUFormattedRelativeDateTimePointer
319*0e209d39SAndroid Build Coastguard Worker  * "Smart pointer" class, closes a UFormattedRelativeDateTime via ureldatefmt_closeResult().
320*0e209d39SAndroid Build Coastguard Worker  * For most methods see the LocalPointerBase base class.
321*0e209d39SAndroid Build Coastguard Worker  *
322*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointerBase
323*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointer
324*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
325*0e209d39SAndroid Build Coastguard Worker  */
326*0e209d39SAndroid Build Coastguard Worker U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedRelativeDateTimePointer, UFormattedRelativeDateTime, ureldatefmt_closeResult);
327*0e209d39SAndroid Build Coastguard Worker 
328*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
329*0e209d39SAndroid Build Coastguard Worker 
330*0e209d39SAndroid Build Coastguard Worker #endif
331*0e209d39SAndroid Build Coastguard Worker 
332*0e209d39SAndroid Build Coastguard Worker /**
333*0e209d39SAndroid Build Coastguard Worker  * Format a combination of URelativeDateTimeUnit and numeric
334*0e209d39SAndroid Build Coastguard Worker  * offset using a numeric style, e.g. "1 week ago", "in 1 week",
335*0e209d39SAndroid Build Coastguard Worker  * "5 weeks ago", "in 5 weeks".
336*0e209d39SAndroid Build Coastguard Worker  *
337*0e209d39SAndroid Build Coastguard Worker  * @param reldatefmt
338*0e209d39SAndroid Build Coastguard Worker  *          The URelativeDateTimeFormatter object specifying the
339*0e209d39SAndroid Build Coastguard Worker  *          format conventions.
340*0e209d39SAndroid Build Coastguard Worker  * @param offset
341*0e209d39SAndroid Build Coastguard Worker  *          The signed offset for the specified unit. This will
342*0e209d39SAndroid Build Coastguard Worker  *          be formatted according to this object's UNumberFormat
343*0e209d39SAndroid Build Coastguard Worker  *          object.
344*0e209d39SAndroid Build Coastguard Worker  * @param unit
345*0e209d39SAndroid Build Coastguard Worker  *          The unit to use when formatting the relative
346*0e209d39SAndroid Build Coastguard Worker  *          date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY.
347*0e209d39SAndroid Build Coastguard Worker  * @param result
348*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a buffer to receive the formatted result.
349*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity
350*0e209d39SAndroid Build Coastguard Worker  *          The maximum size of result.
351*0e209d39SAndroid Build Coastguard Worker  * @param status
352*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UErrorCode to receive any errors. In
353*0e209d39SAndroid Build Coastguard Worker  *          case of error status, the contents of result are
354*0e209d39SAndroid Build Coastguard Worker  *          undefined.
355*0e209d39SAndroid Build Coastguard Worker  * @return
356*0e209d39SAndroid Build Coastguard Worker  *          The length of the formatted result; may be greater
357*0e209d39SAndroid Build Coastguard Worker  *          than resultCapacity, in which case an error is returned.
358*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
359*0e209d39SAndroid Build Coastguard Worker  */
360*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
361*0e209d39SAndroid Build Coastguard Worker ureldatefmt_formatNumeric( const URelativeDateTimeFormatter* reldatefmt,
362*0e209d39SAndroid Build Coastguard Worker                     double                offset,
363*0e209d39SAndroid Build Coastguard Worker                     URelativeDateTimeUnit unit,
364*0e209d39SAndroid Build Coastguard Worker                     UChar*                result,
365*0e209d39SAndroid Build Coastguard Worker                     int32_t               resultCapacity,
366*0e209d39SAndroid Build Coastguard Worker                     UErrorCode*           status);
367*0e209d39SAndroid Build Coastguard Worker 
368*0e209d39SAndroid Build Coastguard Worker /**
369*0e209d39SAndroid Build Coastguard Worker  * Format a combination of URelativeDateTimeUnit and numeric
370*0e209d39SAndroid Build Coastguard Worker  * offset using a numeric style, e.g. "1 week ago", "in 1 week",
371*0e209d39SAndroid Build Coastguard Worker  * "5 weeks ago", "in 5 weeks".
372*0e209d39SAndroid Build Coastguard Worker  *
373*0e209d39SAndroid Build Coastguard Worker  * @param reldatefmt
374*0e209d39SAndroid Build Coastguard Worker  *          The URelativeDateTimeFormatter object specifying the
375*0e209d39SAndroid Build Coastguard Worker  *          format conventions.
376*0e209d39SAndroid Build Coastguard Worker  * @param offset
377*0e209d39SAndroid Build Coastguard Worker  *          The signed offset for the specified unit. This will
378*0e209d39SAndroid Build Coastguard Worker  *          be formatted according to this object's UNumberFormat
379*0e209d39SAndroid Build Coastguard Worker  *          object.
380*0e209d39SAndroid Build Coastguard Worker  * @param unit
381*0e209d39SAndroid Build Coastguard Worker  *          The unit to use when formatting the relative
382*0e209d39SAndroid Build Coastguard Worker  *          date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY.
383*0e209d39SAndroid Build Coastguard Worker  * @param result
384*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UFormattedRelativeDateTime to populate.
385*0e209d39SAndroid Build Coastguard Worker  * @param status
386*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UErrorCode to receive any errors. In
387*0e209d39SAndroid Build Coastguard Worker  *          case of error status, the contents of result are
388*0e209d39SAndroid Build Coastguard Worker  *          undefined.
389*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
390*0e209d39SAndroid Build Coastguard Worker  */
391*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
392*0e209d39SAndroid Build Coastguard Worker ureldatefmt_formatNumericToResult(
393*0e209d39SAndroid Build Coastguard Worker     const URelativeDateTimeFormatter* reldatefmt,
394*0e209d39SAndroid Build Coastguard Worker     double                            offset,
395*0e209d39SAndroid Build Coastguard Worker     URelativeDateTimeUnit             unit,
396*0e209d39SAndroid Build Coastguard Worker     UFormattedRelativeDateTime*       result,
397*0e209d39SAndroid Build Coastguard Worker     UErrorCode*                       status);
398*0e209d39SAndroid Build Coastguard Worker 
399*0e209d39SAndroid Build Coastguard Worker /**
400*0e209d39SAndroid Build Coastguard Worker  * Format a combination of URelativeDateTimeUnit and numeric offset
401*0e209d39SAndroid Build Coastguard Worker  * using a text style if possible, e.g. "last week", "this week",
402*0e209d39SAndroid Build Coastguard Worker  * "next week", "yesterday", "tomorrow". Falls back to numeric
403*0e209d39SAndroid Build Coastguard Worker  * style if no appropriate text term is available for the specified
404*0e209d39SAndroid Build Coastguard Worker  * offset in the object's locale.
405*0e209d39SAndroid Build Coastguard Worker  *
406*0e209d39SAndroid Build Coastguard Worker  * @param reldatefmt
407*0e209d39SAndroid Build Coastguard Worker  *          The URelativeDateTimeFormatter object specifying the
408*0e209d39SAndroid Build Coastguard Worker  *          format conventions.
409*0e209d39SAndroid Build Coastguard Worker  * @param offset
410*0e209d39SAndroid Build Coastguard Worker  *          The signed offset for the specified unit.
411*0e209d39SAndroid Build Coastguard Worker  * @param unit
412*0e209d39SAndroid Build Coastguard Worker  *          The unit to use when formatting the relative
413*0e209d39SAndroid Build Coastguard Worker  *          date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY.
414*0e209d39SAndroid Build Coastguard Worker  * @param result
415*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a buffer to receive the formatted result.
416*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity
417*0e209d39SAndroid Build Coastguard Worker  *          The maximum size of result.
418*0e209d39SAndroid Build Coastguard Worker  * @param status
419*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UErrorCode to receive any errors. In
420*0e209d39SAndroid Build Coastguard Worker  *          case of error status, the contents of result are
421*0e209d39SAndroid Build Coastguard Worker  *          undefined.
422*0e209d39SAndroid Build Coastguard Worker  * @return
423*0e209d39SAndroid Build Coastguard Worker  *          The length of the formatted result; may be greater
424*0e209d39SAndroid Build Coastguard Worker  *          than resultCapacity, in which case an error is returned.
425*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
426*0e209d39SAndroid Build Coastguard Worker  */
427*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
428*0e209d39SAndroid Build Coastguard Worker ureldatefmt_format( const URelativeDateTimeFormatter* reldatefmt,
429*0e209d39SAndroid Build Coastguard Worker                     double                offset,
430*0e209d39SAndroid Build Coastguard Worker                     URelativeDateTimeUnit unit,
431*0e209d39SAndroid Build Coastguard Worker                     UChar*                result,
432*0e209d39SAndroid Build Coastguard Worker                     int32_t               resultCapacity,
433*0e209d39SAndroid Build Coastguard Worker                     UErrorCode*           status);
434*0e209d39SAndroid Build Coastguard Worker 
435*0e209d39SAndroid Build Coastguard Worker /**
436*0e209d39SAndroid Build Coastguard Worker  * Format a combination of URelativeDateTimeUnit and numeric offset
437*0e209d39SAndroid Build Coastguard Worker  * using a text style if possible, e.g. "last week", "this week",
438*0e209d39SAndroid Build Coastguard Worker  * "next week", "yesterday", "tomorrow". Falls back to numeric
439*0e209d39SAndroid Build Coastguard Worker  * style if no appropriate text term is available for the specified
440*0e209d39SAndroid Build Coastguard Worker  * offset in the object's locale.
441*0e209d39SAndroid Build Coastguard Worker  *
442*0e209d39SAndroid Build Coastguard Worker  * This method populates a UFormattedRelativeDateTime, which exposes more
443*0e209d39SAndroid Build Coastguard Worker  * information than the string populated by format().
444*0e209d39SAndroid Build Coastguard Worker  *
445*0e209d39SAndroid Build Coastguard Worker  * @param reldatefmt
446*0e209d39SAndroid Build Coastguard Worker  *          The URelativeDateTimeFormatter object specifying the
447*0e209d39SAndroid Build Coastguard Worker  *          format conventions.
448*0e209d39SAndroid Build Coastguard Worker  * @param offset
449*0e209d39SAndroid Build Coastguard Worker  *          The signed offset for the specified unit.
450*0e209d39SAndroid Build Coastguard Worker  * @param unit
451*0e209d39SAndroid Build Coastguard Worker  *          The unit to use when formatting the relative
452*0e209d39SAndroid Build Coastguard Worker  *          date, e.g. UDAT_REL_UNIT_WEEK, UDAT_REL_UNIT_FRIDAY.
453*0e209d39SAndroid Build Coastguard Worker  * @param result
454*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UFormattedRelativeDateTime to populate.
455*0e209d39SAndroid Build Coastguard Worker  * @param status
456*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UErrorCode to receive any errors. In
457*0e209d39SAndroid Build Coastguard Worker  *          case of error status, the contents of result are
458*0e209d39SAndroid Build Coastguard Worker  *          undefined.
459*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 64
460*0e209d39SAndroid Build Coastguard Worker  */
461*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
462*0e209d39SAndroid Build Coastguard Worker ureldatefmt_formatToResult(
463*0e209d39SAndroid Build Coastguard Worker     const URelativeDateTimeFormatter* reldatefmt,
464*0e209d39SAndroid Build Coastguard Worker     double                            offset,
465*0e209d39SAndroid Build Coastguard Worker     URelativeDateTimeUnit             unit,
466*0e209d39SAndroid Build Coastguard Worker     UFormattedRelativeDateTime*       result,
467*0e209d39SAndroid Build Coastguard Worker     UErrorCode*                       status);
468*0e209d39SAndroid Build Coastguard Worker 
469*0e209d39SAndroid Build Coastguard Worker /**
470*0e209d39SAndroid Build Coastguard Worker  * Combines a relative date string and a time string in this object's
471*0e209d39SAndroid Build Coastguard Worker  * locale. This is done with the same date-time separator used for the
472*0e209d39SAndroid Build Coastguard Worker  * default calendar in this locale to produce a result such as
473*0e209d39SAndroid Build Coastguard Worker  * "yesterday at 3:45 PM".
474*0e209d39SAndroid Build Coastguard Worker  *
475*0e209d39SAndroid Build Coastguard Worker  * @param reldatefmt
476*0e209d39SAndroid Build Coastguard Worker  *          The URelativeDateTimeFormatter object specifying the format conventions.
477*0e209d39SAndroid Build Coastguard Worker  * @param relativeDateString
478*0e209d39SAndroid Build Coastguard Worker  *          The relative date string.
479*0e209d39SAndroid Build Coastguard Worker  * @param relativeDateStringLen
480*0e209d39SAndroid Build Coastguard Worker  *          The length of relativeDateString; may be -1 if relativeDateString
481*0e209d39SAndroid Build Coastguard Worker  *          is zero-terminated.
482*0e209d39SAndroid Build Coastguard Worker  * @param timeString
483*0e209d39SAndroid Build Coastguard Worker  *          The time string.
484*0e209d39SAndroid Build Coastguard Worker  * @param timeStringLen
485*0e209d39SAndroid Build Coastguard Worker  *          The length of timeString; may be -1 if timeString is zero-terminated.
486*0e209d39SAndroid Build Coastguard Worker  * @param result
487*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a buffer to receive the formatted result.
488*0e209d39SAndroid Build Coastguard Worker  * @param resultCapacity
489*0e209d39SAndroid Build Coastguard Worker  *          The maximum size of result.
490*0e209d39SAndroid Build Coastguard Worker  * @param status
491*0e209d39SAndroid Build Coastguard Worker  *          A pointer to a UErrorCode to receive any errors. In case of error status,
492*0e209d39SAndroid Build Coastguard Worker  *          the contents of result are undefined.
493*0e209d39SAndroid Build Coastguard Worker  * @return
494*0e209d39SAndroid Build Coastguard Worker  *          The length of the formatted result; may be greater than resultCapacity,
495*0e209d39SAndroid Build Coastguard Worker  *          in which case an error is returned.
496*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 57
497*0e209d39SAndroid Build Coastguard Worker  */
498*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
499*0e209d39SAndroid Build Coastguard Worker ureldatefmt_combineDateAndTime( const URelativeDateTimeFormatter* reldatefmt,
500*0e209d39SAndroid Build Coastguard Worker                     const UChar *     relativeDateString,
501*0e209d39SAndroid Build Coastguard Worker                     int32_t           relativeDateStringLen,
502*0e209d39SAndroid Build Coastguard Worker                     const UChar *     timeString,
503*0e209d39SAndroid Build Coastguard Worker                     int32_t           timeStringLen,
504*0e209d39SAndroid Build Coastguard Worker                     UChar*            result,
505*0e209d39SAndroid Build Coastguard Worker                     int32_t           resultCapacity,
506*0e209d39SAndroid Build Coastguard Worker                     UErrorCode*       status );
507*0e209d39SAndroid Build Coastguard Worker 
508*0e209d39SAndroid Build Coastguard Worker #endif /* !UCONFIG_NO_FORMATTING */
509*0e209d39SAndroid Build Coastguard Worker 
510*0e209d39SAndroid Build Coastguard Worker #endif
511