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