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