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) 1997-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 * File DATEFMT.H 10*0e209d39SAndroid Build Coastguard Worker * 11*0e209d39SAndroid Build Coastguard Worker * Modification History: 12*0e209d39SAndroid Build Coastguard Worker * 13*0e209d39SAndroid Build Coastguard Worker * Date Name Description 14*0e209d39SAndroid Build Coastguard Worker * 02/19/97 aliu Converted from java. 15*0e209d39SAndroid Build Coastguard Worker * 04/01/97 aliu Added support for centuries. 16*0e209d39SAndroid Build Coastguard Worker * 07/23/98 stephen JDK 1.2 sync 17*0e209d39SAndroid Build Coastguard Worker * 11/15/99 weiv Added support for week of year/day of week formatting 18*0e209d39SAndroid Build Coastguard Worker ******************************************************************************** 19*0e209d39SAndroid Build Coastguard Worker */ 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker #ifndef DATEFMT_H 22*0e209d39SAndroid Build Coastguard Worker #define DATEFMT_H 23*0e209d39SAndroid Build Coastguard Worker 24*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 25*0e209d39SAndroid Build Coastguard Worker 26*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API 27*0e209d39SAndroid Build Coastguard Worker 28*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING 29*0e209d39SAndroid Build Coastguard Worker 30*0e209d39SAndroid Build Coastguard Worker #include "unicode/udat.h" 31*0e209d39SAndroid Build Coastguard Worker #include "unicode/calendar.h" 32*0e209d39SAndroid Build Coastguard Worker #include "unicode/numfmt.h" 33*0e209d39SAndroid Build Coastguard Worker #include "unicode/format.h" 34*0e209d39SAndroid Build Coastguard Worker #include "unicode/locid.h" 35*0e209d39SAndroid Build Coastguard Worker #include "unicode/enumset.h" 36*0e209d39SAndroid Build Coastguard Worker #include "unicode/udisplaycontext.h" 37*0e209d39SAndroid Build Coastguard Worker 38*0e209d39SAndroid Build Coastguard Worker /** 39*0e209d39SAndroid Build Coastguard Worker * \file 40*0e209d39SAndroid Build Coastguard Worker * \brief C++ API: Abstract class for converting dates. 41*0e209d39SAndroid Build Coastguard Worker */ 42*0e209d39SAndroid Build Coastguard Worker 43*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 44*0e209d39SAndroid Build Coastguard Worker 45*0e209d39SAndroid Build Coastguard Worker class TimeZone; 46*0e209d39SAndroid Build Coastguard Worker class DateTimePatternGenerator; 47*0e209d39SAndroid Build Coastguard Worker 48*0e209d39SAndroid Build Coastguard Worker /** 49*0e209d39SAndroid Build Coastguard Worker * \cond 50*0e209d39SAndroid Build Coastguard Worker * Export an explicit template instantiation. (See digitlst.h, datefmt.h, and others.) 51*0e209d39SAndroid Build Coastguard Worker * (When building DLLs for Windows this is required.) 52*0e209d39SAndroid Build Coastguard Worker */ 53*0e209d39SAndroid Build Coastguard Worker #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN && !defined(U_IN_DOXYGEN) 54*0e209d39SAndroid Build Coastguard Worker template class U_I18N_API EnumSet<UDateFormatBooleanAttribute, 55*0e209d39SAndroid Build Coastguard Worker 0, 56*0e209d39SAndroid Build Coastguard Worker UDAT_BOOLEAN_ATTRIBUTE_COUNT>; 57*0e209d39SAndroid Build Coastguard Worker #endif 58*0e209d39SAndroid Build Coastguard Worker /** \endcond */ 59*0e209d39SAndroid Build Coastguard Worker 60*0e209d39SAndroid Build Coastguard Worker /** 61*0e209d39SAndroid Build Coastguard Worker * DateFormat is an abstract class for a family of classes that convert dates and 62*0e209d39SAndroid Build Coastguard Worker * times from their internal representations to textual form and back again in a 63*0e209d39SAndroid Build Coastguard Worker * language-independent manner. Converting from the internal representation (milliseconds 64*0e209d39SAndroid Build Coastguard Worker * since midnight, January 1, 1970) to text is known as "formatting," and converting 65*0e209d39SAndroid Build Coastguard Worker * from text to millis is known as "parsing." We currently define only one concrete 66*0e209d39SAndroid Build Coastguard Worker * subclass of DateFormat: SimpleDateFormat, which can handle pretty much all normal 67*0e209d39SAndroid Build Coastguard Worker * date formatting and parsing actions. 68*0e209d39SAndroid Build Coastguard Worker * <P> 69*0e209d39SAndroid Build Coastguard Worker * DateFormat helps you to format and parse dates for any locale. Your code can 70*0e209d39SAndroid Build Coastguard Worker * be completely independent of the locale conventions for months, days of the 71*0e209d39SAndroid Build Coastguard Worker * week, or even the calendar format: lunar vs. solar. 72*0e209d39SAndroid Build Coastguard Worker * <P> 73*0e209d39SAndroid Build Coastguard Worker * To format a date for the current Locale, use one of the static factory 74*0e209d39SAndroid Build Coastguard Worker * methods: 75*0e209d39SAndroid Build Coastguard Worker * <pre> 76*0e209d39SAndroid Build Coastguard Worker * \code 77*0e209d39SAndroid Build Coastguard Worker * DateFormat* dfmt = DateFormat::createDateInstance(); 78*0e209d39SAndroid Build Coastguard Worker * UDate myDate = Calendar::getNow(); 79*0e209d39SAndroid Build Coastguard Worker * UnicodeString myString; 80*0e209d39SAndroid Build Coastguard Worker * myString = dfmt->format( myDate, myString ); 81*0e209d39SAndroid Build Coastguard Worker * \endcode 82*0e209d39SAndroid Build Coastguard Worker * </pre> 83*0e209d39SAndroid Build Coastguard Worker * If you are formatting multiple numbers, it is more efficient to get the 84*0e209d39SAndroid Build Coastguard Worker * format and use it multiple times so that the system doesn't have to fetch the 85*0e209d39SAndroid Build Coastguard Worker * information about the local language and country conventions multiple times. 86*0e209d39SAndroid Build Coastguard Worker * <pre> 87*0e209d39SAndroid Build Coastguard Worker * \code 88*0e209d39SAndroid Build Coastguard Worker * DateFormat* df = DateFormat::createDateInstance(); 89*0e209d39SAndroid Build Coastguard Worker * UnicodeString myString; 90*0e209d39SAndroid Build Coastguard Worker * UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values 91*0e209d39SAndroid Build Coastguard Worker * for (int32_t i = 0; i < 3; ++i) { 92*0e209d39SAndroid Build Coastguard Worker * myString.remove(); 93*0e209d39SAndroid Build Coastguard Worker * cout << df->format( myDateArr[i], myString ) << endl; 94*0e209d39SAndroid Build Coastguard Worker * } 95*0e209d39SAndroid Build Coastguard Worker * \endcode 96*0e209d39SAndroid Build Coastguard Worker * </pre> 97*0e209d39SAndroid Build Coastguard Worker * To get specific fields of a date, you can use UFieldPosition to 98*0e209d39SAndroid Build Coastguard Worker * get specific fields. 99*0e209d39SAndroid Build Coastguard Worker * <pre> 100*0e209d39SAndroid Build Coastguard Worker * \code 101*0e209d39SAndroid Build Coastguard Worker * DateFormat* dfmt = DateFormat::createDateInstance(); 102*0e209d39SAndroid Build Coastguard Worker * FieldPosition pos(DateFormat::YEAR_FIELD); 103*0e209d39SAndroid Build Coastguard Worker * UnicodeString myString; 104*0e209d39SAndroid Build Coastguard Worker * myString = dfmt->format( myDate, myString ); 105*0e209d39SAndroid Build Coastguard Worker * cout << myString << endl; 106*0e209d39SAndroid Build Coastguard Worker * cout << pos.getBeginIndex() << "," << pos. getEndIndex() << endl; 107*0e209d39SAndroid Build Coastguard Worker * \endcode 108*0e209d39SAndroid Build Coastguard Worker * </pre> 109*0e209d39SAndroid Build Coastguard Worker * To format a date for a different Locale, specify it in the call to 110*0e209d39SAndroid Build Coastguard Worker * createDateInstance(). 111*0e209d39SAndroid Build Coastguard Worker * <pre> 112*0e209d39SAndroid Build Coastguard Worker * \code 113*0e209d39SAndroid Build Coastguard Worker * DateFormat* df = 114*0e209d39SAndroid Build Coastguard Worker * DateFormat::createDateInstance( DateFormat::SHORT, Locale::getFrance()); 115*0e209d39SAndroid Build Coastguard Worker * \endcode 116*0e209d39SAndroid Build Coastguard Worker * </pre> 117*0e209d39SAndroid Build Coastguard Worker * You can use a DateFormat to parse also. 118*0e209d39SAndroid Build Coastguard Worker * <pre> 119*0e209d39SAndroid Build Coastguard Worker * \code 120*0e209d39SAndroid Build Coastguard Worker * UErrorCode status = U_ZERO_ERROR; 121*0e209d39SAndroid Build Coastguard Worker * UDate myDate = df->parse(myString, status); 122*0e209d39SAndroid Build Coastguard Worker * \endcode 123*0e209d39SAndroid Build Coastguard Worker * </pre> 124*0e209d39SAndroid Build Coastguard Worker * Use createDateInstance() to produce the normal date format for that country. 125*0e209d39SAndroid Build Coastguard Worker * There are other static factory methods available. Use createTimeInstance() 126*0e209d39SAndroid Build Coastguard Worker * to produce the normal time format for that country. Use createDateTimeInstance() 127*0e209d39SAndroid Build Coastguard Worker * to produce a DateFormat that formats both date and time. You can pass in 128*0e209d39SAndroid Build Coastguard Worker * different options to these factory methods to control the length of the 129*0e209d39SAndroid Build Coastguard Worker * result; from SHORT to MEDIUM to LONG to FULL. The exact result depends on the 130*0e209d39SAndroid Build Coastguard Worker * locale, but generally: 131*0e209d39SAndroid Build Coastguard Worker * <ul type=round> 132*0e209d39SAndroid Build Coastguard Worker * <li> SHORT is completely numeric, such as 12/13/52 or 3:30pm 133*0e209d39SAndroid Build Coastguard Worker * <li> MEDIUM is longer, such as Jan 12, 1952 134*0e209d39SAndroid Build Coastguard Worker * <li> LONG is longer, such as January 12, 1952 or 3:30:32pm 135*0e209d39SAndroid Build Coastguard Worker * <li> FULL is pretty completely specified, such as 136*0e209d39SAndroid Build Coastguard Worker * Tuesday, April 12, 1952 AD or 3:30:42pm PST. 137*0e209d39SAndroid Build Coastguard Worker * </ul> 138*0e209d39SAndroid Build Coastguard Worker * You can also set the time zone on the format if you wish. If you want even 139*0e209d39SAndroid Build Coastguard Worker * more control over the format or parsing, (or want to give your users more 140*0e209d39SAndroid Build Coastguard Worker * control), you can try casting the DateFormat you get from the factory methods 141*0e209d39SAndroid Build Coastguard Worker * to a SimpleDateFormat. This will work for the majority of countries; just 142*0e209d39SAndroid Build Coastguard Worker * remember to check getDynamicClassID() before carrying out the cast. 143*0e209d39SAndroid Build Coastguard Worker * <P> 144*0e209d39SAndroid Build Coastguard Worker * You can also use forms of the parse and format methods with ParsePosition and 145*0e209d39SAndroid Build Coastguard Worker * FieldPosition to allow you to 146*0e209d39SAndroid Build Coastguard Worker * <ul type=round> 147*0e209d39SAndroid Build Coastguard Worker * <li> Progressively parse through pieces of a string. 148*0e209d39SAndroid Build Coastguard Worker * <li> Align any particular field, or find out where it is for selection 149*0e209d39SAndroid Build Coastguard Worker * on the screen. 150*0e209d39SAndroid Build Coastguard Worker * </ul> 151*0e209d39SAndroid Build Coastguard Worker * 152*0e209d39SAndroid Build Coastguard Worker * <p><em>User subclasses are not supported.</em> While clients may write 153*0e209d39SAndroid Build Coastguard Worker * subclasses, such code will not necessarily work and will not be 154*0e209d39SAndroid Build Coastguard Worker * guaranteed to work stably from release to release. 155*0e209d39SAndroid Build Coastguard Worker */ 156*0e209d39SAndroid Build Coastguard Worker class U_I18N_API DateFormat : public Format { 157*0e209d39SAndroid Build Coastguard Worker public: 158*0e209d39SAndroid Build Coastguard Worker 159*0e209d39SAndroid Build Coastguard Worker /** 160*0e209d39SAndroid Build Coastguard Worker * Constants for various style patterns. These reflect the order of items in 161*0e209d39SAndroid Build Coastguard Worker * the DateTimePatterns resource. There are 4 time patterns, 4 date patterns, 162*0e209d39SAndroid Build Coastguard Worker * the default date-time pattern, and 4 date-time patterns. Each block of 4 values 163*0e209d39SAndroid Build Coastguard Worker * in the resource occurs in the order full, long, medium, short. 164*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 165*0e209d39SAndroid Build Coastguard Worker */ 166*0e209d39SAndroid Build Coastguard Worker enum EStyle 167*0e209d39SAndroid Build Coastguard Worker { 168*0e209d39SAndroid Build Coastguard Worker kNone = -1, 169*0e209d39SAndroid Build Coastguard Worker 170*0e209d39SAndroid Build Coastguard Worker kFull = 0, 171*0e209d39SAndroid Build Coastguard Worker kLong = 1, 172*0e209d39SAndroid Build Coastguard Worker kMedium = 2, 173*0e209d39SAndroid Build Coastguard Worker kShort = 3, 174*0e209d39SAndroid Build Coastguard Worker 175*0e209d39SAndroid Build Coastguard Worker kDateOffset = kShort + 1, 176*0e209d39SAndroid Build Coastguard Worker // kFull + kDateOffset = 4 177*0e209d39SAndroid Build Coastguard Worker // kLong + kDateOffset = 5 178*0e209d39SAndroid Build Coastguard Worker // kMedium + kDateOffset = 6 179*0e209d39SAndroid Build Coastguard Worker // kShort + kDateOffset = 7 180*0e209d39SAndroid Build Coastguard Worker 181*0e209d39SAndroid Build Coastguard Worker kDateTime = 8, 182*0e209d39SAndroid Build Coastguard Worker // Default DateTime 183*0e209d39SAndroid Build Coastguard Worker 184*0e209d39SAndroid Build Coastguard Worker kDateTimeOffset = kDateTime + 1, 185*0e209d39SAndroid Build Coastguard Worker // kFull + kDateTimeOffset = 9 186*0e209d39SAndroid Build Coastguard Worker // kLong + kDateTimeOffset = 10 187*0e209d39SAndroid Build Coastguard Worker // kMedium + kDateTimeOffset = 11 188*0e209d39SAndroid Build Coastguard Worker // kShort + kDateTimeOffset = 12 189*0e209d39SAndroid Build Coastguard Worker 190*0e209d39SAndroid Build Coastguard Worker // relative dates 191*0e209d39SAndroid Build Coastguard Worker kRelative = (1 << 7), 192*0e209d39SAndroid Build Coastguard Worker 193*0e209d39SAndroid Build Coastguard Worker kFullRelative = (kFull | kRelative), 194*0e209d39SAndroid Build Coastguard Worker 195*0e209d39SAndroid Build Coastguard Worker kLongRelative = kLong | kRelative, 196*0e209d39SAndroid Build Coastguard Worker 197*0e209d39SAndroid Build Coastguard Worker kMediumRelative = kMedium | kRelative, 198*0e209d39SAndroid Build Coastguard Worker 199*0e209d39SAndroid Build Coastguard Worker kShortRelative = kShort | kRelative, 200*0e209d39SAndroid Build Coastguard Worker 201*0e209d39SAndroid Build Coastguard Worker 202*0e209d39SAndroid Build Coastguard Worker kDefault = kMedium, 203*0e209d39SAndroid Build Coastguard Worker 204*0e209d39SAndroid Build Coastguard Worker 205*0e209d39SAndroid Build Coastguard Worker 206*0e209d39SAndroid Build Coastguard Worker /** 207*0e209d39SAndroid Build Coastguard Worker * These constants are provided for backwards compatibility only. 208*0e209d39SAndroid Build Coastguard Worker * Please use the C++ style constants defined above. 209*0e209d39SAndroid Build Coastguard Worker */ 210*0e209d39SAndroid Build Coastguard Worker FULL = kFull, 211*0e209d39SAndroid Build Coastguard Worker LONG = kLong, 212*0e209d39SAndroid Build Coastguard Worker MEDIUM = kMedium, 213*0e209d39SAndroid Build Coastguard Worker SHORT = kShort, 214*0e209d39SAndroid Build Coastguard Worker DEFAULT = kDefault, 215*0e209d39SAndroid Build Coastguard Worker DATE_OFFSET = kDateOffset, 216*0e209d39SAndroid Build Coastguard Worker NONE = kNone, 217*0e209d39SAndroid Build Coastguard Worker DATE_TIME = kDateTime 218*0e209d39SAndroid Build Coastguard Worker }; 219*0e209d39SAndroid Build Coastguard Worker 220*0e209d39SAndroid Build Coastguard Worker /** 221*0e209d39SAndroid Build Coastguard Worker * Destructor. 222*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 223*0e209d39SAndroid Build Coastguard Worker */ 224*0e209d39SAndroid Build Coastguard Worker virtual ~DateFormat(); 225*0e209d39SAndroid Build Coastguard Worker 226*0e209d39SAndroid Build Coastguard Worker /** 227*0e209d39SAndroid Build Coastguard Worker * Clones this object polymorphically. 228*0e209d39SAndroid Build Coastguard Worker * The caller owns the result and should delete it when done. 229*0e209d39SAndroid Build Coastguard Worker * @return clone, or nullptr if an error occurred 230*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 231*0e209d39SAndroid Build Coastguard Worker */ 232*0e209d39SAndroid Build Coastguard Worker virtual DateFormat* clone() const override = 0; 233*0e209d39SAndroid Build Coastguard Worker 234*0e209d39SAndroid Build Coastguard Worker /** 235*0e209d39SAndroid Build Coastguard Worker * Equality operator. Returns true if the two formats have the same behavior. 236*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 237*0e209d39SAndroid Build Coastguard Worker */ 238*0e209d39SAndroid Build Coastguard Worker virtual bool operator==(const Format&) const override; 239*0e209d39SAndroid Build Coastguard Worker 240*0e209d39SAndroid Build Coastguard Worker 241*0e209d39SAndroid Build Coastguard Worker using Format::format; 242*0e209d39SAndroid Build Coastguard Worker 243*0e209d39SAndroid Build Coastguard Worker /** 244*0e209d39SAndroid Build Coastguard Worker * Format an object to produce a string. This method handles Formattable 245*0e209d39SAndroid Build Coastguard Worker * objects with a UDate type. If a the Formattable object type is not a Date, 246*0e209d39SAndroid Build Coastguard Worker * then it returns a failing UErrorCode. 247*0e209d39SAndroid Build Coastguard Worker * 248*0e209d39SAndroid Build Coastguard Worker * @param obj The object to format. Must be a Date. 249*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 250*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 251*0e209d39SAndroid Build Coastguard Worker * @param pos On input: an alignment field, if desired. 252*0e209d39SAndroid Build Coastguard Worker * On output: the offsets of the alignment field. 253*0e209d39SAndroid Build Coastguard Worker * @param status Output param filled with success/failure status. 254*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 255*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 256*0e209d39SAndroid Build Coastguard Worker */ 257*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& format(const Formattable& obj, 258*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 259*0e209d39SAndroid Build Coastguard Worker FieldPosition& pos, 260*0e209d39SAndroid Build Coastguard Worker UErrorCode& status) const override; 261*0e209d39SAndroid Build Coastguard Worker 262*0e209d39SAndroid Build Coastguard Worker /** 263*0e209d39SAndroid Build Coastguard Worker * Format an object to produce a string. This method handles Formattable 264*0e209d39SAndroid Build Coastguard Worker * objects with a UDate type. If a the Formattable object type is not a Date, 265*0e209d39SAndroid Build Coastguard Worker * then it returns a failing UErrorCode. 266*0e209d39SAndroid Build Coastguard Worker * 267*0e209d39SAndroid Build Coastguard Worker * @param obj The object to format. Must be a Date. 268*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 269*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 270*0e209d39SAndroid Build Coastguard Worker * @param posIter On return, can be used to iterate over positions 271*0e209d39SAndroid Build Coastguard Worker * of fields generated by this format call. Field values 272*0e209d39SAndroid Build Coastguard Worker * are defined in UDateFormatField. Can be nullptr. 273*0e209d39SAndroid Build Coastguard Worker * @param status Output param filled with success/failure status. 274*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 275*0e209d39SAndroid Build Coastguard Worker * @stable ICU 4.4 276*0e209d39SAndroid Build Coastguard Worker */ 277*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& format(const Formattable& obj, 278*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 279*0e209d39SAndroid Build Coastguard Worker FieldPositionIterator* posIter, 280*0e209d39SAndroid Build Coastguard Worker UErrorCode& status) const override; 281*0e209d39SAndroid Build Coastguard Worker /** 282*0e209d39SAndroid Build Coastguard Worker * Formats a date into a date/time string. This is an abstract method which 283*0e209d39SAndroid Build Coastguard Worker * concrete subclasses must implement. 284*0e209d39SAndroid Build Coastguard Worker * <P> 285*0e209d39SAndroid Build Coastguard Worker * On input, the FieldPosition parameter may have its "field" member filled with 286*0e209d39SAndroid Build Coastguard Worker * an enum value specifying a field. On output, the FieldPosition will be filled 287*0e209d39SAndroid Build Coastguard Worker * in with the text offsets for that field. 288*0e209d39SAndroid Build Coastguard Worker * <P> For example, given a time text 289*0e209d39SAndroid Build Coastguard Worker * "1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is 290*0e209d39SAndroid Build Coastguard Worker * UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and 291*0e209d39SAndroid Build Coastguard Worker * statfieldPositionus.getEndIndex will be set to 0 and 4, respectively. 292*0e209d39SAndroid Build Coastguard Worker * <P> Notice 293*0e209d39SAndroid Build Coastguard Worker * that if the same time field appears more than once in a pattern, the status will 294*0e209d39SAndroid Build Coastguard Worker * be set for the first occurrence of that time field. For instance, 295*0e209d39SAndroid Build Coastguard Worker * formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)" 296*0e209d39SAndroid Build Coastguard Worker * using the pattern "h a z (zzzz)" and the alignment field 297*0e209d39SAndroid Build Coastguard Worker * DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and 298*0e209d39SAndroid Build Coastguard Worker * fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first 299*0e209d39SAndroid Build Coastguard Worker * occurrence of the timezone pattern character 'z'. 300*0e209d39SAndroid Build Coastguard Worker * 301*0e209d39SAndroid Build Coastguard Worker * @param cal Calendar set to the date and time to be formatted 302*0e209d39SAndroid Build Coastguard Worker * into a date/time string. When the calendar type is 303*0e209d39SAndroid Build Coastguard Worker * different from the internal calendar held by this 304*0e209d39SAndroid Build Coastguard Worker * DateFormat instance, the date and the time zone will 305*0e209d39SAndroid Build Coastguard Worker * be inherited from the input calendar, but other calendar 306*0e209d39SAndroid Build Coastguard Worker * field values will be calculated by the internal calendar. 307*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 308*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 309*0e209d39SAndroid Build Coastguard Worker * @param fieldPosition On input: an alignment field, if desired (see examples above) 310*0e209d39SAndroid Build Coastguard Worker * On output: the offsets of the alignment field (see examples above) 311*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 312*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.1 313*0e209d39SAndroid Build Coastguard Worker */ 314*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& format( Calendar& cal, 315*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 316*0e209d39SAndroid Build Coastguard Worker FieldPosition& fieldPosition) const = 0; 317*0e209d39SAndroid Build Coastguard Worker 318*0e209d39SAndroid Build Coastguard Worker /** 319*0e209d39SAndroid Build Coastguard Worker * Formats a date into a date/time string. Subclasses should implement this method. 320*0e209d39SAndroid Build Coastguard Worker * 321*0e209d39SAndroid Build Coastguard Worker * @param cal Calendar set to the date and time to be formatted 322*0e209d39SAndroid Build Coastguard Worker * into a date/time string. When the calendar type is 323*0e209d39SAndroid Build Coastguard Worker * different from the internal calendar held by this 324*0e209d39SAndroid Build Coastguard Worker * DateFormat instance, the date and the time zone will 325*0e209d39SAndroid Build Coastguard Worker * be inherited from the input calendar, but other calendar 326*0e209d39SAndroid Build Coastguard Worker * field values will be calculated by the internal calendar. 327*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 328*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 329*0e209d39SAndroid Build Coastguard Worker * @param posIter On return, can be used to iterate over positions 330*0e209d39SAndroid Build Coastguard Worker * of fields generated by this format call. Field values 331*0e209d39SAndroid Build Coastguard Worker * are defined in UDateFormatField. Can be nullptr. 332*0e209d39SAndroid Build Coastguard Worker * @param status error status. 333*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 334*0e209d39SAndroid Build Coastguard Worker * @stable ICU 4.4 335*0e209d39SAndroid Build Coastguard Worker */ 336*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString& format(Calendar& cal, 337*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 338*0e209d39SAndroid Build Coastguard Worker FieldPositionIterator* posIter, 339*0e209d39SAndroid Build Coastguard Worker UErrorCode& status) const; 340*0e209d39SAndroid Build Coastguard Worker /** 341*0e209d39SAndroid Build Coastguard Worker * Formats a UDate into a date/time string. 342*0e209d39SAndroid Build Coastguard Worker * <P> 343*0e209d39SAndroid Build Coastguard Worker * On input, the FieldPosition parameter may have its "field" member filled with 344*0e209d39SAndroid Build Coastguard Worker * an enum value specifying a field. On output, the FieldPosition will be filled 345*0e209d39SAndroid Build Coastguard Worker * in with the text offsets for that field. 346*0e209d39SAndroid Build Coastguard Worker * <P> For example, given a time text 347*0e209d39SAndroid Build Coastguard Worker * "1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is 348*0e209d39SAndroid Build Coastguard Worker * UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and 349*0e209d39SAndroid Build Coastguard Worker * statfieldPositionus.getEndIndex will be set to 0 and 4, respectively. 350*0e209d39SAndroid Build Coastguard Worker * <P> Notice 351*0e209d39SAndroid Build Coastguard Worker * that if the same time field appears more than once in a pattern, the status will 352*0e209d39SAndroid Build Coastguard Worker * be set for the first occurrence of that time field. For instance, 353*0e209d39SAndroid Build Coastguard Worker * formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)" 354*0e209d39SAndroid Build Coastguard Worker * using the pattern "h a z (zzzz)" and the alignment field 355*0e209d39SAndroid Build Coastguard Worker * DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and 356*0e209d39SAndroid Build Coastguard Worker * fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first 357*0e209d39SAndroid Build Coastguard Worker * occurrence of the timezone pattern character 'z'. 358*0e209d39SAndroid Build Coastguard Worker * 359*0e209d39SAndroid Build Coastguard Worker * @param date UDate to be formatted into a date/time string. 360*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 361*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 362*0e209d39SAndroid Build Coastguard Worker * @param fieldPosition On input: an alignment field, if desired (see examples above) 363*0e209d39SAndroid Build Coastguard Worker * On output: the offsets of the alignment field (see examples above) 364*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 365*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 366*0e209d39SAndroid Build Coastguard Worker */ 367*0e209d39SAndroid Build Coastguard Worker UnicodeString& format( UDate date, 368*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 369*0e209d39SAndroid Build Coastguard Worker FieldPosition& fieldPosition) const; 370*0e209d39SAndroid Build Coastguard Worker 371*0e209d39SAndroid Build Coastguard Worker /** 372*0e209d39SAndroid Build Coastguard Worker * Formats a UDate into a date/time string. 373*0e209d39SAndroid Build Coastguard Worker * 374*0e209d39SAndroid Build Coastguard Worker * @param date UDate to be formatted into a date/time string. 375*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 376*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 377*0e209d39SAndroid Build Coastguard Worker * @param posIter On return, can be used to iterate over positions 378*0e209d39SAndroid Build Coastguard Worker * of fields generated by this format call. Field values 379*0e209d39SAndroid Build Coastguard Worker * are defined in UDateFormatField. Can be nullptr. 380*0e209d39SAndroid Build Coastguard Worker * @param status error status. 381*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 382*0e209d39SAndroid Build Coastguard Worker * @stable ICU 4.4 383*0e209d39SAndroid Build Coastguard Worker */ 384*0e209d39SAndroid Build Coastguard Worker UnicodeString& format(UDate date, 385*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 386*0e209d39SAndroid Build Coastguard Worker FieldPositionIterator* posIter, 387*0e209d39SAndroid Build Coastguard Worker UErrorCode& status) const; 388*0e209d39SAndroid Build Coastguard Worker /** 389*0e209d39SAndroid Build Coastguard Worker * Formats a UDate into a date/time string. If there is a problem, you won't 390*0e209d39SAndroid Build Coastguard Worker * know, using this method. Use the overloaded format() method which takes a 391*0e209d39SAndroid Build Coastguard Worker * FieldPosition& to detect formatting problems. 392*0e209d39SAndroid Build Coastguard Worker * 393*0e209d39SAndroid Build Coastguard Worker * @param date The UDate value to be formatted into a string. 394*0e209d39SAndroid Build Coastguard Worker * @param appendTo Output parameter to receive result. 395*0e209d39SAndroid Build Coastguard Worker * Result is appended to existing contents. 396*0e209d39SAndroid Build Coastguard Worker * @return Reference to 'appendTo' parameter. 397*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 398*0e209d39SAndroid Build Coastguard Worker */ 399*0e209d39SAndroid Build Coastguard Worker UnicodeString& format(UDate date, UnicodeString& appendTo) const; 400*0e209d39SAndroid Build Coastguard Worker 401*0e209d39SAndroid Build Coastguard Worker /** 402*0e209d39SAndroid Build Coastguard Worker * Parse a date/time string. For example, a time text "07/10/96 4:5 PM, PDT" 403*0e209d39SAndroid Build Coastguard Worker * will be parsed into a UDate that is equivalent to Date(837039928046). 404*0e209d39SAndroid Build Coastguard Worker * Parsing begins at the beginning of the string and proceeds as far as 405*0e209d39SAndroid Build Coastguard Worker * possible. Assuming no parse errors were encountered, this function 406*0e209d39SAndroid Build Coastguard Worker * doesn't return any information about how much of the string was consumed 407*0e209d39SAndroid Build Coastguard Worker * by the parsing. If you need that information, use the version of 408*0e209d39SAndroid Build Coastguard Worker * parse() that takes a ParsePosition. 409*0e209d39SAndroid Build Coastguard Worker * <P> 410*0e209d39SAndroid Build Coastguard Worker * By default, parsing is lenient: If the input is not in the form used by 411*0e209d39SAndroid Build Coastguard Worker * this object's format method but can still be parsed as a date, then the 412*0e209d39SAndroid Build Coastguard Worker * parse succeeds. Clients may insist on strict adherence to the format by 413*0e209d39SAndroid Build Coastguard Worker * calling setLenient(false). 414*0e209d39SAndroid Build Coastguard Worker * @see DateFormat::setLenient(boolean) 415*0e209d39SAndroid Build Coastguard Worker * <P> 416*0e209d39SAndroid Build Coastguard Worker * Note that the normal date formats associated with some calendars - such 417*0e209d39SAndroid Build Coastguard Worker * as the Chinese lunar calendar - do not specify enough fields to enable 418*0e209d39SAndroid Build Coastguard Worker * dates to be parsed unambiguously. In the case of the Chinese lunar 419*0e209d39SAndroid Build Coastguard Worker * calendar, while the year within the current 60-year cycle is specified, 420*0e209d39SAndroid Build Coastguard Worker * the number of such cycles since the start date of the calendar (in the 421*0e209d39SAndroid Build Coastguard Worker * ERA field of the Calendar object) is not normally part of the format, 422*0e209d39SAndroid Build Coastguard Worker * and parsing may assume the wrong era. For cases such as this it is 423*0e209d39SAndroid Build Coastguard Worker * recommended that clients parse using the method 424*0e209d39SAndroid Build Coastguard Worker * parse(const UnicodeString&, Calendar& cal, ParsePosition&) 425*0e209d39SAndroid Build Coastguard Worker * with the Calendar passed in set to the current date, or to a date 426*0e209d39SAndroid Build Coastguard Worker * within the era/cycle that should be assumed if absent in the format. 427*0e209d39SAndroid Build Coastguard Worker * 428*0e209d39SAndroid Build Coastguard Worker * @param text The date/time string to be parsed into a UDate value. 429*0e209d39SAndroid Build Coastguard Worker * @param status Output param to be set to success/failure code. If 430*0e209d39SAndroid Build Coastguard Worker * 'text' cannot be parsed, it will be set to a failure 431*0e209d39SAndroid Build Coastguard Worker * code. 432*0e209d39SAndroid Build Coastguard Worker * @return The parsed UDate value, if successful. 433*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 434*0e209d39SAndroid Build Coastguard Worker */ 435*0e209d39SAndroid Build Coastguard Worker virtual UDate parse( const UnicodeString& text, 436*0e209d39SAndroid Build Coastguard Worker UErrorCode& status) const; 437*0e209d39SAndroid Build Coastguard Worker 438*0e209d39SAndroid Build Coastguard Worker /** 439*0e209d39SAndroid Build Coastguard Worker * Parse a date/time string beginning at the given parse position. For 440*0e209d39SAndroid Build Coastguard Worker * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date 441*0e209d39SAndroid Build Coastguard Worker * that is equivalent to Date(837039928046). 442*0e209d39SAndroid Build Coastguard Worker * <P> 443*0e209d39SAndroid Build Coastguard Worker * By default, parsing is lenient: If the input is not in the form used by 444*0e209d39SAndroid Build Coastguard Worker * this object's format method but can still be parsed as a date, then the 445*0e209d39SAndroid Build Coastguard Worker * parse succeeds. Clients may insist on strict adherence to the format by 446*0e209d39SAndroid Build Coastguard Worker * calling setLenient(false). 447*0e209d39SAndroid Build Coastguard Worker * @see DateFormat::setLenient(boolean) 448*0e209d39SAndroid Build Coastguard Worker * 449*0e209d39SAndroid Build Coastguard Worker * @param text The date/time string to be parsed. 450*0e209d39SAndroid Build Coastguard Worker * @param cal A Calendar set on input to the date and time to be used for 451*0e209d39SAndroid Build Coastguard Worker * missing values in the date/time string being parsed, and set 452*0e209d39SAndroid Build Coastguard Worker * on output to the parsed date/time. When the calendar type is 453*0e209d39SAndroid Build Coastguard Worker * different from the internal calendar held by this DateFormat 454*0e209d39SAndroid Build Coastguard Worker * instance, the internal calendar will be cloned to a work 455*0e209d39SAndroid Build Coastguard Worker * calendar set to the same milliseconds and time zone as the 456*0e209d39SAndroid Build Coastguard Worker * cal parameter, field values will be parsed based on the work 457*0e209d39SAndroid Build Coastguard Worker * calendar, then the result (milliseconds and time zone) will 458*0e209d39SAndroid Build Coastguard Worker * be set in this calendar. 459*0e209d39SAndroid Build Coastguard Worker * @param pos On input, the position at which to start parsing; on 460*0e209d39SAndroid Build Coastguard Worker * output, the position at which parsing terminated, or the 461*0e209d39SAndroid Build Coastguard Worker * start position if the parse failed. 462*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.1 463*0e209d39SAndroid Build Coastguard Worker */ 464*0e209d39SAndroid Build Coastguard Worker virtual void parse( const UnicodeString& text, 465*0e209d39SAndroid Build Coastguard Worker Calendar& cal, 466*0e209d39SAndroid Build Coastguard Worker ParsePosition& pos) const = 0; 467*0e209d39SAndroid Build Coastguard Worker 468*0e209d39SAndroid Build Coastguard Worker /** 469*0e209d39SAndroid Build Coastguard Worker * Parse a date/time string beginning at the given parse position. For 470*0e209d39SAndroid Build Coastguard Worker * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date 471*0e209d39SAndroid Build Coastguard Worker * that is equivalent to Date(837039928046). 472*0e209d39SAndroid Build Coastguard Worker * <P> 473*0e209d39SAndroid Build Coastguard Worker * By default, parsing is lenient: If the input is not in the form used by 474*0e209d39SAndroid Build Coastguard Worker * this object's format method but can still be parsed as a date, then the 475*0e209d39SAndroid Build Coastguard Worker * parse succeeds. Clients may insist on strict adherence to the format by 476*0e209d39SAndroid Build Coastguard Worker * calling setLenient(false). 477*0e209d39SAndroid Build Coastguard Worker * @see DateFormat::setLenient(boolean) 478*0e209d39SAndroid Build Coastguard Worker * <P> 479*0e209d39SAndroid Build Coastguard Worker * Note that the normal date formats associated with some calendars - such 480*0e209d39SAndroid Build Coastguard Worker * as the Chinese lunar calendar - do not specify enough fields to enable 481*0e209d39SAndroid Build Coastguard Worker * dates to be parsed unambiguously. In the case of the Chinese lunar 482*0e209d39SAndroid Build Coastguard Worker * calendar, while the year within the current 60-year cycle is specified, 483*0e209d39SAndroid Build Coastguard Worker * the number of such cycles since the start date of the calendar (in the 484*0e209d39SAndroid Build Coastguard Worker * ERA field of the Calendar object) is not normally part of the format, 485*0e209d39SAndroid Build Coastguard Worker * and parsing may assume the wrong era. For cases such as this it is 486*0e209d39SAndroid Build Coastguard Worker * recommended that clients parse using the method 487*0e209d39SAndroid Build Coastguard Worker * parse(const UnicodeString&, Calendar& cal, ParsePosition&) 488*0e209d39SAndroid Build Coastguard Worker * with the Calendar passed in set to the current date, or to a date 489*0e209d39SAndroid Build Coastguard Worker * within the era/cycle that should be assumed if absent in the format. 490*0e209d39SAndroid Build Coastguard Worker * 491*0e209d39SAndroid Build Coastguard Worker * @param text The date/time string to be parsed into a UDate value. 492*0e209d39SAndroid Build Coastguard Worker * @param pos On input, the position at which to start parsing; on 493*0e209d39SAndroid Build Coastguard Worker * output, the position at which parsing terminated, or the 494*0e209d39SAndroid Build Coastguard Worker * start position if the parse failed. 495*0e209d39SAndroid Build Coastguard Worker * @return A valid UDate if the input could be parsed. 496*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 497*0e209d39SAndroid Build Coastguard Worker */ 498*0e209d39SAndroid Build Coastguard Worker UDate parse( const UnicodeString& text, 499*0e209d39SAndroid Build Coastguard Worker ParsePosition& pos) const; 500*0e209d39SAndroid Build Coastguard Worker 501*0e209d39SAndroid Build Coastguard Worker /** 502*0e209d39SAndroid Build Coastguard Worker * Parse a string to produce an object. This methods handles parsing of 503*0e209d39SAndroid Build Coastguard Worker * date/time strings into Formattable objects with UDate types. 504*0e209d39SAndroid Build Coastguard Worker * <P> 505*0e209d39SAndroid Build Coastguard Worker * Before calling, set parse_pos.index to the offset you want to start 506*0e209d39SAndroid Build Coastguard Worker * parsing at in the source. After calling, parse_pos.index is the end of 507*0e209d39SAndroid Build Coastguard Worker * the text you parsed. If error occurs, index is unchanged. 508*0e209d39SAndroid Build Coastguard Worker * <P> 509*0e209d39SAndroid Build Coastguard Worker * When parsing, leading whitespace is discarded (with a successful parse), 510*0e209d39SAndroid Build Coastguard Worker * while trailing whitespace is left as is. 511*0e209d39SAndroid Build Coastguard Worker * <P> 512*0e209d39SAndroid Build Coastguard Worker * See Format::parseObject() for more. 513*0e209d39SAndroid Build Coastguard Worker * 514*0e209d39SAndroid Build Coastguard Worker * @param source The string to be parsed into an object. 515*0e209d39SAndroid Build Coastguard Worker * @param result Formattable to be set to the parse result. 516*0e209d39SAndroid Build Coastguard Worker * If parse fails, return contents are undefined. 517*0e209d39SAndroid Build Coastguard Worker * @param parse_pos The position to start parsing at. Upon return 518*0e209d39SAndroid Build Coastguard Worker * this param is set to the position after the 519*0e209d39SAndroid Build Coastguard Worker * last character successfully parsed. If the 520*0e209d39SAndroid Build Coastguard Worker * source is not parsed successfully, this param 521*0e209d39SAndroid Build Coastguard Worker * will remain unchanged. 522*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 523*0e209d39SAndroid Build Coastguard Worker */ 524*0e209d39SAndroid Build Coastguard Worker virtual void parseObject(const UnicodeString& source, 525*0e209d39SAndroid Build Coastguard Worker Formattable& result, 526*0e209d39SAndroid Build Coastguard Worker ParsePosition& parse_pos) const override; 527*0e209d39SAndroid Build Coastguard Worker 528*0e209d39SAndroid Build Coastguard Worker /** 529*0e209d39SAndroid Build Coastguard Worker * Create a default date/time formatter that uses the SHORT style for both 530*0e209d39SAndroid Build Coastguard Worker * the date and the time. 531*0e209d39SAndroid Build Coastguard Worker * 532*0e209d39SAndroid Build Coastguard Worker * @return A date/time formatter which the caller owns. 533*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 534*0e209d39SAndroid Build Coastguard Worker */ 535*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createInstance(); 536*0e209d39SAndroid Build Coastguard Worker 537*0e209d39SAndroid Build Coastguard Worker /** 538*0e209d39SAndroid Build Coastguard Worker * Creates a time formatter with the given formatting style for the given 539*0e209d39SAndroid Build Coastguard Worker * locale. 540*0e209d39SAndroid Build Coastguard Worker * 541*0e209d39SAndroid Build Coastguard Worker * @param style The given formatting style. For example, 542*0e209d39SAndroid Build Coastguard Worker * SHORT for "h:mm a" in the US locale. Relative 543*0e209d39SAndroid Build Coastguard Worker * time styles are not currently supported. 544*0e209d39SAndroid Build Coastguard Worker * @param aLocale The given locale. 545*0e209d39SAndroid Build Coastguard Worker * @return A time formatter which the caller owns. 546*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 547*0e209d39SAndroid Build Coastguard Worker */ 548*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault, 549*0e209d39SAndroid Build Coastguard Worker const Locale& aLocale = Locale::getDefault()); 550*0e209d39SAndroid Build Coastguard Worker 551*0e209d39SAndroid Build Coastguard Worker /** 552*0e209d39SAndroid Build Coastguard Worker * Creates a date formatter with the given formatting style for the given 553*0e209d39SAndroid Build Coastguard Worker * const locale. 554*0e209d39SAndroid Build Coastguard Worker * 555*0e209d39SAndroid Build Coastguard Worker * @param style The given formatting style. For example, SHORT for "M/d/yy" in the 556*0e209d39SAndroid Build Coastguard Worker * US locale. As currently implemented, relative date formatting only 557*0e209d39SAndroid Build Coastguard Worker * affects a limited range of calendar days before or after the 558*0e209d39SAndroid Build Coastguard Worker * current date, based on the CLDR <field type="day">/<relative> data: 559*0e209d39SAndroid Build Coastguard Worker * For example, in English, "Yesterday", "Today", and "Tomorrow". 560*0e209d39SAndroid Build Coastguard Worker * Outside of this range, dates are formatted using the corresponding 561*0e209d39SAndroid Build Coastguard Worker * non-relative style. 562*0e209d39SAndroid Build Coastguard Worker * @param aLocale The given locale. 563*0e209d39SAndroid Build Coastguard Worker * @return A date formatter which the caller owns. 564*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 565*0e209d39SAndroid Build Coastguard Worker */ 566*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault, 567*0e209d39SAndroid Build Coastguard Worker const Locale& aLocale = Locale::getDefault()); 568*0e209d39SAndroid Build Coastguard Worker 569*0e209d39SAndroid Build Coastguard Worker /** 570*0e209d39SAndroid Build Coastguard Worker * Creates a date/time formatter with the given formatting styles for the 571*0e209d39SAndroid Build Coastguard Worker * given locale. 572*0e209d39SAndroid Build Coastguard Worker * 573*0e209d39SAndroid Build Coastguard Worker * @param dateStyle The given formatting style for the date portion of the result. 574*0e209d39SAndroid Build Coastguard Worker * For example, SHORT for "M/d/yy" in the US locale. As currently 575*0e209d39SAndroid Build Coastguard Worker * implemented, relative date formatting only affects a limited range 576*0e209d39SAndroid Build Coastguard Worker * of calendar days before or after the current date, based on the 577*0e209d39SAndroid Build Coastguard Worker * CLDR <field type="day">/<relative> data: For example, in English, 578*0e209d39SAndroid Build Coastguard Worker * "Yesterday", "Today", and "Tomorrow". Outside of this range, dates 579*0e209d39SAndroid Build Coastguard Worker * are formatted using the corresponding non-relative style. 580*0e209d39SAndroid Build Coastguard Worker * @param timeStyle The given formatting style for the time portion of the result. 581*0e209d39SAndroid Build Coastguard Worker * For example, SHORT for "h:mm a" in the US locale. Relative 582*0e209d39SAndroid Build Coastguard Worker * time styles are not currently supported. 583*0e209d39SAndroid Build Coastguard Worker * @param aLocale The given locale. 584*0e209d39SAndroid Build Coastguard Worker * @return A date/time formatter which the caller owns. 585*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 586*0e209d39SAndroid Build Coastguard Worker */ 587*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault, 588*0e209d39SAndroid Build Coastguard Worker EStyle timeStyle = kDefault, 589*0e209d39SAndroid Build Coastguard Worker const Locale& aLocale = Locale::getDefault()); 590*0e209d39SAndroid Build Coastguard Worker 591*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API 592*0e209d39SAndroid Build Coastguard Worker /** 593*0e209d39SAndroid Build Coastguard Worker * Returns the best pattern given a skeleton and locale. 594*0e209d39SAndroid Build Coastguard Worker * @param locale the locale 595*0e209d39SAndroid Build Coastguard Worker * @param skeleton the skeleton 596*0e209d39SAndroid Build Coastguard Worker * @param status ICU error returned here 597*0e209d39SAndroid Build Coastguard Worker * @return the best pattern. 598*0e209d39SAndroid Build Coastguard Worker * @internal For ICU use only. 599*0e209d39SAndroid Build Coastguard Worker */ 600*0e209d39SAndroid Build Coastguard Worker static UnicodeString getBestPattern( 601*0e209d39SAndroid Build Coastguard Worker const Locale &locale, 602*0e209d39SAndroid Build Coastguard Worker const UnicodeString &skeleton, 603*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 604*0e209d39SAndroid Build Coastguard Worker #endif /* U_HIDE_INTERNAL_API */ 605*0e209d39SAndroid Build Coastguard Worker 606*0e209d39SAndroid Build Coastguard Worker /** 607*0e209d39SAndroid Build Coastguard Worker * Creates a date/time formatter for the given skeleton and 608*0e209d39SAndroid Build Coastguard Worker * default locale. 609*0e209d39SAndroid Build Coastguard Worker * 610*0e209d39SAndroid Build Coastguard Worker * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can 611*0e209d39SAndroid Build Coastguard Worker * be in any order, and this method uses the locale to 612*0e209d39SAndroid Build Coastguard Worker * map the skeleton to a pattern that includes locale 613*0e209d39SAndroid Build Coastguard Worker * specific separators with the fields in the appropriate 614*0e209d39SAndroid Build Coastguard Worker * order for that locale. 615*0e209d39SAndroid Build Coastguard Worker * @param status Any error returned here. 616*0e209d39SAndroid Build Coastguard Worker * @return A date/time formatter which the caller owns. 617*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55 618*0e209d39SAndroid Build Coastguard Worker */ 619*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createInstanceForSkeleton( 620*0e209d39SAndroid Build Coastguard Worker const UnicodeString& skeleton, 621*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 622*0e209d39SAndroid Build Coastguard Worker 623*0e209d39SAndroid Build Coastguard Worker /** 624*0e209d39SAndroid Build Coastguard Worker * Creates a date/time formatter for the given skeleton and locale. 625*0e209d39SAndroid Build Coastguard Worker * 626*0e209d39SAndroid Build Coastguard Worker * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can 627*0e209d39SAndroid Build Coastguard Worker * be in any order, and this method uses the locale to 628*0e209d39SAndroid Build Coastguard Worker * map the skeleton to a pattern that includes locale 629*0e209d39SAndroid Build Coastguard Worker * specific separators with the fields in the appropriate 630*0e209d39SAndroid Build Coastguard Worker * order for that locale. 631*0e209d39SAndroid Build Coastguard Worker * @param locale The given locale. 632*0e209d39SAndroid Build Coastguard Worker * @param status Any error returned here. 633*0e209d39SAndroid Build Coastguard Worker * @return A date/time formatter which the caller owns. 634*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55 635*0e209d39SAndroid Build Coastguard Worker */ 636*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createInstanceForSkeleton( 637*0e209d39SAndroid Build Coastguard Worker const UnicodeString& skeleton, 638*0e209d39SAndroid Build Coastguard Worker const Locale &locale, 639*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 640*0e209d39SAndroid Build Coastguard Worker 641*0e209d39SAndroid Build Coastguard Worker /** 642*0e209d39SAndroid Build Coastguard Worker * Creates a date/time formatter for the given skeleton and locale. 643*0e209d39SAndroid Build Coastguard Worker * 644*0e209d39SAndroid Build Coastguard Worker * @param calendarToAdopt the calendar returned DateFormat is to use. 645*0e209d39SAndroid Build Coastguard Worker * @param skeleton The skeleton e.g "yMMMMd." Fields in the skeleton can 646*0e209d39SAndroid Build Coastguard Worker * be in any order, and this method uses the locale to 647*0e209d39SAndroid Build Coastguard Worker * map the skeleton to a pattern that includes locale 648*0e209d39SAndroid Build Coastguard Worker * specific separators with the fields in the appropriate 649*0e209d39SAndroid Build Coastguard Worker * order for that locale. 650*0e209d39SAndroid Build Coastguard Worker * @param locale The given locale. 651*0e209d39SAndroid Build Coastguard Worker * @param status Any error returned here. 652*0e209d39SAndroid Build Coastguard Worker * @return A date/time formatter which the caller owns. 653*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55 654*0e209d39SAndroid Build Coastguard Worker */ 655*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 createInstanceForSkeleton( 656*0e209d39SAndroid Build Coastguard Worker Calendar *calendarToAdopt, 657*0e209d39SAndroid Build Coastguard Worker const UnicodeString& skeleton, 658*0e209d39SAndroid Build Coastguard Worker const Locale &locale, 659*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 660*0e209d39SAndroid Build Coastguard Worker 661*0e209d39SAndroid Build Coastguard Worker 662*0e209d39SAndroid Build Coastguard Worker /** 663*0e209d39SAndroid Build Coastguard Worker * Gets the set of locales for which DateFormats are installed. 664*0e209d39SAndroid Build Coastguard Worker * @param count Filled in with the number of locales in the list that is returned. 665*0e209d39SAndroid Build Coastguard Worker * @return the set of locales for which DateFormats are installed. The caller 666*0e209d39SAndroid Build Coastguard Worker * does NOT own this list and must not delete it. 667*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 668*0e209d39SAndroid Build Coastguard Worker */ 669*0e209d39SAndroid Build Coastguard Worker static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 670*0e209d39SAndroid Build Coastguard Worker 671*0e209d39SAndroid Build Coastguard Worker /** 672*0e209d39SAndroid Build Coastguard Worker * Returns whether both date/time parsing in the encapsulated Calendar object and DateFormat whitespace & 673*0e209d39SAndroid Build Coastguard Worker * numeric processing is lenient. 674*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 675*0e209d39SAndroid Build Coastguard Worker */ 676*0e209d39SAndroid Build Coastguard Worker virtual UBool isLenient() const; 677*0e209d39SAndroid Build Coastguard Worker 678*0e209d39SAndroid Build Coastguard Worker /** 679*0e209d39SAndroid Build Coastguard Worker * Specifies whether date/time parsing is to be lenient. With 680*0e209d39SAndroid Build Coastguard Worker * lenient parsing, the parser may use heuristics to interpret inputs that 681*0e209d39SAndroid Build Coastguard Worker * do not precisely match this object's format. Without lenient parsing, 682*0e209d39SAndroid Build Coastguard Worker * inputs must match this object's format more closely. 683*0e209d39SAndroid Build Coastguard Worker * 684*0e209d39SAndroid Build Coastguard Worker * Note: ICU 53 introduced finer grained control of leniency (and added 685*0e209d39SAndroid Build Coastguard Worker * new control points) making the preferred method a combination of 686*0e209d39SAndroid Build Coastguard Worker * setCalendarLenient() & setBooleanAttribute() calls. 687*0e209d39SAndroid Build Coastguard Worker * This method supports prior functionality but may not support all 688*0e209d39SAndroid Build Coastguard Worker * future leniency control & behavior of DateFormat. For control of pre 53 leniency, 689*0e209d39SAndroid Build Coastguard Worker * Calendar and DateFormat whitespace & numeric tolerance, this method is safe to 690*0e209d39SAndroid Build Coastguard Worker * use. However, mixing leniency control via this method and modification of the 691*0e209d39SAndroid Build Coastguard Worker * newer attributes via setBooleanAttribute() may produce undesirable 692*0e209d39SAndroid Build Coastguard Worker * results. 693*0e209d39SAndroid Build Coastguard Worker * 694*0e209d39SAndroid Build Coastguard Worker * @param lenient True specifies date/time interpretation to be lenient. 695*0e209d39SAndroid Build Coastguard Worker * @see Calendar::setLenient 696*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 697*0e209d39SAndroid Build Coastguard Worker */ 698*0e209d39SAndroid Build Coastguard Worker virtual void setLenient(UBool lenient); 699*0e209d39SAndroid Build Coastguard Worker 700*0e209d39SAndroid Build Coastguard Worker 701*0e209d39SAndroid Build Coastguard Worker /** 702*0e209d39SAndroid Build Coastguard Worker * Returns whether date/time parsing in the encapsulated Calendar object processing is lenient. 703*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 704*0e209d39SAndroid Build Coastguard Worker */ 705*0e209d39SAndroid Build Coastguard Worker virtual UBool isCalendarLenient() const; 706*0e209d39SAndroid Build Coastguard Worker 707*0e209d39SAndroid Build Coastguard Worker /** 708*0e209d39SAndroid Build Coastguard Worker * Specifies whether encapsulated Calendar date/time parsing is to be lenient. With 709*0e209d39SAndroid Build Coastguard Worker * lenient parsing, the parser may use heuristics to interpret inputs that 710*0e209d39SAndroid Build Coastguard Worker * do not precisely match this object's format. Without lenient parsing, 711*0e209d39SAndroid Build Coastguard Worker * inputs must match this object's format more closely. 712*0e209d39SAndroid Build Coastguard Worker * @param lenient when true, parsing is lenient 713*0e209d39SAndroid Build Coastguard Worker * @see com.ibm.icu.util.Calendar#setLenient 714*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 715*0e209d39SAndroid Build Coastguard Worker */ 716*0e209d39SAndroid Build Coastguard Worker virtual void setCalendarLenient(UBool lenient); 717*0e209d39SAndroid Build Coastguard Worker 718*0e209d39SAndroid Build Coastguard Worker 719*0e209d39SAndroid Build Coastguard Worker /** 720*0e209d39SAndroid Build Coastguard Worker * Gets the calendar associated with this date/time formatter. 721*0e209d39SAndroid Build Coastguard Worker * The calendar is owned by the formatter and must not be modified. 722*0e209d39SAndroid Build Coastguard Worker * Also, the calendar does not reflect the results of a parse operation. 723*0e209d39SAndroid Build Coastguard Worker * To parse to a calendar, use {@link #parse(const UnicodeString&, Calendar& cal, ParsePosition&) const parse(const UnicodeString&, Calendar& cal, ParsePosition&)} 724*0e209d39SAndroid Build Coastguard Worker * @return the calendar associated with this date/time formatter. 725*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 726*0e209d39SAndroid Build Coastguard Worker */ 727*0e209d39SAndroid Build Coastguard Worker virtual const Calendar* getCalendar() const; 728*0e209d39SAndroid Build Coastguard Worker 729*0e209d39SAndroid Build Coastguard Worker /** 730*0e209d39SAndroid Build Coastguard Worker * Set the calendar to be used by this date format. Initially, the default 731*0e209d39SAndroid Build Coastguard Worker * calendar for the specified or default locale is used. The caller should 732*0e209d39SAndroid Build Coastguard Worker * not delete the Calendar object after it is adopted by this call. 733*0e209d39SAndroid Build Coastguard Worker * Adopting a new calendar will change to the default symbols. 734*0e209d39SAndroid Build Coastguard Worker * 735*0e209d39SAndroid Build Coastguard Worker * @param calendarToAdopt Calendar object to be adopted. 736*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 737*0e209d39SAndroid Build Coastguard Worker */ 738*0e209d39SAndroid Build Coastguard Worker virtual void adoptCalendar(Calendar* calendarToAdopt); 739*0e209d39SAndroid Build Coastguard Worker 740*0e209d39SAndroid Build Coastguard Worker /** 741*0e209d39SAndroid Build Coastguard Worker * Set the calendar to be used by this date format. Initially, the default 742*0e209d39SAndroid Build Coastguard Worker * calendar for the specified or default locale is used. 743*0e209d39SAndroid Build Coastguard Worker * 744*0e209d39SAndroid Build Coastguard Worker * @param newCalendar Calendar object to be set. 745*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 746*0e209d39SAndroid Build Coastguard Worker */ 747*0e209d39SAndroid Build Coastguard Worker virtual void setCalendar(const Calendar& newCalendar); 748*0e209d39SAndroid Build Coastguard Worker 749*0e209d39SAndroid Build Coastguard Worker 750*0e209d39SAndroid Build Coastguard Worker /** 751*0e209d39SAndroid Build Coastguard Worker * Gets the number formatter which this date/time formatter uses to format 752*0e209d39SAndroid Build Coastguard Worker * and parse the numeric portions of the pattern. 753*0e209d39SAndroid Build Coastguard Worker * @return the number formatter which this date/time formatter uses. 754*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 755*0e209d39SAndroid Build Coastguard Worker */ 756*0e209d39SAndroid Build Coastguard Worker virtual const NumberFormat* getNumberFormat() const; 757*0e209d39SAndroid Build Coastguard Worker 758*0e209d39SAndroid Build Coastguard Worker /** 759*0e209d39SAndroid Build Coastguard Worker * Allows you to set the number formatter. The caller should 760*0e209d39SAndroid Build Coastguard Worker * not delete the NumberFormat object after it is adopted by this call. 761*0e209d39SAndroid Build Coastguard Worker * @param formatToAdopt NumberFormat object to be adopted. 762*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 763*0e209d39SAndroid Build Coastguard Worker */ 764*0e209d39SAndroid Build Coastguard Worker virtual void adoptNumberFormat(NumberFormat* formatToAdopt); 765*0e209d39SAndroid Build Coastguard Worker 766*0e209d39SAndroid Build Coastguard Worker /** 767*0e209d39SAndroid Build Coastguard Worker * Allows you to set the number formatter. 768*0e209d39SAndroid Build Coastguard Worker * @param newNumberFormat NumberFormat object to be set. 769*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 770*0e209d39SAndroid Build Coastguard Worker */ 771*0e209d39SAndroid Build Coastguard Worker virtual void setNumberFormat(const NumberFormat& newNumberFormat); 772*0e209d39SAndroid Build Coastguard Worker 773*0e209d39SAndroid Build Coastguard Worker /** 774*0e209d39SAndroid Build Coastguard Worker * Returns a reference to the TimeZone used by this DateFormat's calendar. 775*0e209d39SAndroid Build Coastguard Worker * @return the time zone associated with the calendar of DateFormat. 776*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 777*0e209d39SAndroid Build Coastguard Worker */ 778*0e209d39SAndroid Build Coastguard Worker virtual const TimeZone& getTimeZone() const; 779*0e209d39SAndroid Build Coastguard Worker 780*0e209d39SAndroid Build Coastguard Worker /** 781*0e209d39SAndroid Build Coastguard Worker * Sets the time zone for the calendar of this DateFormat object. The caller 782*0e209d39SAndroid Build Coastguard Worker * no longer owns the TimeZone object and should not delete it after this call. 783*0e209d39SAndroid Build Coastguard Worker * @param zoneToAdopt the TimeZone to be adopted. 784*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 785*0e209d39SAndroid Build Coastguard Worker */ 786*0e209d39SAndroid Build Coastguard Worker virtual void adoptTimeZone(TimeZone* zoneToAdopt); 787*0e209d39SAndroid Build Coastguard Worker 788*0e209d39SAndroid Build Coastguard Worker /** 789*0e209d39SAndroid Build Coastguard Worker * Sets the time zone for the calendar of this DateFormat object. 790*0e209d39SAndroid Build Coastguard Worker * @param zone the new time zone. 791*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 792*0e209d39SAndroid Build Coastguard Worker */ 793*0e209d39SAndroid Build Coastguard Worker virtual void setTimeZone(const TimeZone& zone); 794*0e209d39SAndroid Build Coastguard Worker 795*0e209d39SAndroid Build Coastguard Worker /** 796*0e209d39SAndroid Build Coastguard Worker * Set a particular UDisplayContext value in the formatter, such as 797*0e209d39SAndroid Build Coastguard Worker * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. 798*0e209d39SAndroid Build Coastguard Worker * @param value The UDisplayContext value to set. 799*0e209d39SAndroid Build Coastguard Worker * @param status Input/output status. If at entry this indicates a failure 800*0e209d39SAndroid Build Coastguard Worker * status, the function will do nothing; otherwise this will be 801*0e209d39SAndroid Build Coastguard Worker * updated with any new status from the function. 802*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 803*0e209d39SAndroid Build Coastguard Worker */ 804*0e209d39SAndroid Build Coastguard Worker virtual void setContext(UDisplayContext value, UErrorCode& status); 805*0e209d39SAndroid Build Coastguard Worker 806*0e209d39SAndroid Build Coastguard Worker /** 807*0e209d39SAndroid Build Coastguard Worker * Get the formatter's UDisplayContext value for the specified UDisplayContextType, 808*0e209d39SAndroid Build Coastguard Worker * such as UDISPCTX_TYPE_CAPITALIZATION. 809*0e209d39SAndroid Build Coastguard Worker * @param type The UDisplayContextType whose value to return 810*0e209d39SAndroid Build Coastguard Worker * @param status Input/output status. If at entry this indicates a failure 811*0e209d39SAndroid Build Coastguard Worker * status, the function will do nothing; otherwise this will be 812*0e209d39SAndroid Build Coastguard Worker * updated with any new status from the function. 813*0e209d39SAndroid Build Coastguard Worker * @return The UDisplayContextValue for the specified type. 814*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 815*0e209d39SAndroid Build Coastguard Worker */ 816*0e209d39SAndroid Build Coastguard Worker virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const; 817*0e209d39SAndroid Build Coastguard Worker 818*0e209d39SAndroid Build Coastguard Worker /** 819*0e209d39SAndroid Build Coastguard Worker * Sets an boolean attribute on this DateFormat. 820*0e209d39SAndroid Build Coastguard Worker * May return U_UNSUPPORTED_ERROR if this instance does not support 821*0e209d39SAndroid Build Coastguard Worker * the specified attribute. 822*0e209d39SAndroid Build Coastguard Worker * @param attr the attribute to set 823*0e209d39SAndroid Build Coastguard Worker * @param newvalue new value 824*0e209d39SAndroid Build Coastguard Worker * @param status the error type 825*0e209d39SAndroid Build Coastguard Worker * @return *this - for chaining (example: format.setAttribute(...).setAttribute(...) ) 826*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 827*0e209d39SAndroid Build Coastguard Worker */ 828*0e209d39SAndroid Build Coastguard Worker 829*0e209d39SAndroid Build Coastguard Worker virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr, 830*0e209d39SAndroid Build Coastguard Worker UBool newvalue, 831*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 832*0e209d39SAndroid Build Coastguard Worker 833*0e209d39SAndroid Build Coastguard Worker /** 834*0e209d39SAndroid Build Coastguard Worker * Returns a boolean from this DateFormat 835*0e209d39SAndroid Build Coastguard Worker * May return U_UNSUPPORTED_ERROR if this instance does not support 836*0e209d39SAndroid Build Coastguard Worker * the specified attribute. 837*0e209d39SAndroid Build Coastguard Worker * @param attr the attribute to set 838*0e209d39SAndroid Build Coastguard Worker * @param status the error type 839*0e209d39SAndroid Build Coastguard Worker * @return the attribute value. Undefined if there is an error. 840*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 841*0e209d39SAndroid Build Coastguard Worker */ 842*0e209d39SAndroid Build Coastguard Worker virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const; 843*0e209d39SAndroid Build Coastguard Worker 844*0e209d39SAndroid Build Coastguard Worker protected: 845*0e209d39SAndroid Build Coastguard Worker /** 846*0e209d39SAndroid Build Coastguard Worker * Default constructor. Creates a DateFormat with no Calendar or NumberFormat 847*0e209d39SAndroid Build Coastguard Worker * associated with it. This constructor depends on the subclasses to fill in 848*0e209d39SAndroid Build Coastguard Worker * the calendar and numberFormat fields. 849*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 850*0e209d39SAndroid Build Coastguard Worker */ 851*0e209d39SAndroid Build Coastguard Worker DateFormat(); 852*0e209d39SAndroid Build Coastguard Worker 853*0e209d39SAndroid Build Coastguard Worker /** 854*0e209d39SAndroid Build Coastguard Worker * Copy constructor. 855*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 856*0e209d39SAndroid Build Coastguard Worker */ 857*0e209d39SAndroid Build Coastguard Worker DateFormat(const DateFormat&); 858*0e209d39SAndroid Build Coastguard Worker 859*0e209d39SAndroid Build Coastguard Worker /** 860*0e209d39SAndroid Build Coastguard Worker * Default assignment operator. 861*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.0 862*0e209d39SAndroid Build Coastguard Worker */ 863*0e209d39SAndroid Build Coastguard Worker DateFormat& operator=(const DateFormat&); 864*0e209d39SAndroid Build Coastguard Worker 865*0e209d39SAndroid Build Coastguard Worker /** 866*0e209d39SAndroid Build Coastguard Worker * The calendar that DateFormat uses to produce the time field values needed 867*0e209d39SAndroid Build Coastguard Worker * to implement date/time formatting. Subclasses should generally initialize 868*0e209d39SAndroid Build Coastguard Worker * this to the default calendar for the locale associated with this DateFormat. 869*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 870*0e209d39SAndroid Build Coastguard Worker */ 871*0e209d39SAndroid Build Coastguard Worker Calendar* fCalendar; 872*0e209d39SAndroid Build Coastguard Worker 873*0e209d39SAndroid Build Coastguard Worker /** 874*0e209d39SAndroid Build Coastguard Worker * The number formatter that DateFormat uses to format numbers in dates and 875*0e209d39SAndroid Build Coastguard Worker * times. Subclasses should generally initialize this to the default number 876*0e209d39SAndroid Build Coastguard Worker * format for the locale associated with this DateFormat. 877*0e209d39SAndroid Build Coastguard Worker * @stable ICU 2.4 878*0e209d39SAndroid Build Coastguard Worker */ 879*0e209d39SAndroid Build Coastguard Worker NumberFormat* fNumberFormat; 880*0e209d39SAndroid Build Coastguard Worker 881*0e209d39SAndroid Build Coastguard Worker 882*0e209d39SAndroid Build Coastguard Worker private: 883*0e209d39SAndroid Build Coastguard Worker 884*0e209d39SAndroid Build Coastguard Worker /** 885*0e209d39SAndroid Build Coastguard Worker * Gets the date/time formatter with the given formatting styles for the 886*0e209d39SAndroid Build Coastguard Worker * given locale. 887*0e209d39SAndroid Build Coastguard Worker * @param dateStyle the given date formatting style. 888*0e209d39SAndroid Build Coastguard Worker * @param timeStyle the given time formatting style. 889*0e209d39SAndroid Build Coastguard Worker * @param inLocale the given locale. 890*0e209d39SAndroid Build Coastguard Worker * @return a date/time formatter, or 0 on failure. 891*0e209d39SAndroid Build Coastguard Worker */ 892*0e209d39SAndroid Build Coastguard Worker static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale); 893*0e209d39SAndroid Build Coastguard Worker 894*0e209d39SAndroid Build Coastguard Worker 895*0e209d39SAndroid Build Coastguard Worker /** 896*0e209d39SAndroid Build Coastguard Worker * enum set of active boolean attributes for this instance 897*0e209d39SAndroid Build Coastguard Worker */ 898*0e209d39SAndroid Build Coastguard Worker EnumSet<UDateFormatBooleanAttribute, 0, UDAT_BOOLEAN_ATTRIBUTE_COUNT> fBoolFlags; 899*0e209d39SAndroid Build Coastguard Worker 900*0e209d39SAndroid Build Coastguard Worker 901*0e209d39SAndroid Build Coastguard Worker UDisplayContext fCapitalizationContext; 902*0e209d39SAndroid Build Coastguard Worker friend class DateFmtKeyByStyle; 903*0e209d39SAndroid Build Coastguard Worker 904*0e209d39SAndroid Build Coastguard Worker public: 905*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_OBSOLETE_API 906*0e209d39SAndroid Build Coastguard Worker /** 907*0e209d39SAndroid Build Coastguard Worker * Field selector for FieldPosition for DateFormat fields. 908*0e209d39SAndroid Build Coastguard Worker * @obsolete ICU 3.4 use UDateFormatField instead, since this API will be 909*0e209d39SAndroid Build Coastguard Worker * removed in that release 910*0e209d39SAndroid Build Coastguard Worker */ 911*0e209d39SAndroid Build Coastguard Worker enum EField 912*0e209d39SAndroid Build Coastguard Worker { 913*0e209d39SAndroid Build Coastguard Worker // Obsolete; use UDateFormatField instead 914*0e209d39SAndroid Build Coastguard Worker kEraField = UDAT_ERA_FIELD, 915*0e209d39SAndroid Build Coastguard Worker kYearField = UDAT_YEAR_FIELD, 916*0e209d39SAndroid Build Coastguard Worker kMonthField = UDAT_MONTH_FIELD, 917*0e209d39SAndroid Build Coastguard Worker kDateField = UDAT_DATE_FIELD, 918*0e209d39SAndroid Build Coastguard Worker kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD, 919*0e209d39SAndroid Build Coastguard Worker kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD, 920*0e209d39SAndroid Build Coastguard Worker kMinuteField = UDAT_MINUTE_FIELD, 921*0e209d39SAndroid Build Coastguard Worker kSecondField = UDAT_SECOND_FIELD, 922*0e209d39SAndroid Build Coastguard Worker kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD, 923*0e209d39SAndroid Build Coastguard Worker kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD, 924*0e209d39SAndroid Build Coastguard Worker kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD, 925*0e209d39SAndroid Build Coastguard Worker kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD, 926*0e209d39SAndroid Build Coastguard Worker kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD, 927*0e209d39SAndroid Build Coastguard Worker kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD, 928*0e209d39SAndroid Build Coastguard Worker kAmPmField = UDAT_AM_PM_FIELD, 929*0e209d39SAndroid Build Coastguard Worker kHour1Field = UDAT_HOUR1_FIELD, 930*0e209d39SAndroid Build Coastguard Worker kHour0Field = UDAT_HOUR0_FIELD, 931*0e209d39SAndroid Build Coastguard Worker kTimezoneField = UDAT_TIMEZONE_FIELD, 932*0e209d39SAndroid Build Coastguard Worker kYearWOYField = UDAT_YEAR_WOY_FIELD, 933*0e209d39SAndroid Build Coastguard Worker kDOWLocalField = UDAT_DOW_LOCAL_FIELD, 934*0e209d39SAndroid Build Coastguard Worker kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD, 935*0e209d39SAndroid Build Coastguard Worker kJulianDayField = UDAT_JULIAN_DAY_FIELD, 936*0e209d39SAndroid Build Coastguard Worker kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD, 937*0e209d39SAndroid Build Coastguard Worker 938*0e209d39SAndroid Build Coastguard Worker // Obsolete; use UDateFormatField instead 939*0e209d39SAndroid Build Coastguard Worker ERA_FIELD = UDAT_ERA_FIELD, 940*0e209d39SAndroid Build Coastguard Worker YEAR_FIELD = UDAT_YEAR_FIELD, 941*0e209d39SAndroid Build Coastguard Worker MONTH_FIELD = UDAT_MONTH_FIELD, 942*0e209d39SAndroid Build Coastguard Worker DATE_FIELD = UDAT_DATE_FIELD, 943*0e209d39SAndroid Build Coastguard Worker HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD, 944*0e209d39SAndroid Build Coastguard Worker HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD, 945*0e209d39SAndroid Build Coastguard Worker MINUTE_FIELD = UDAT_MINUTE_FIELD, 946*0e209d39SAndroid Build Coastguard Worker SECOND_FIELD = UDAT_SECOND_FIELD, 947*0e209d39SAndroid Build Coastguard Worker MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD, 948*0e209d39SAndroid Build Coastguard Worker DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD, 949*0e209d39SAndroid Build Coastguard Worker DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD, 950*0e209d39SAndroid Build Coastguard Worker DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD, 951*0e209d39SAndroid Build Coastguard Worker WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD, 952*0e209d39SAndroid Build Coastguard Worker WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD, 953*0e209d39SAndroid Build Coastguard Worker AM_PM_FIELD = UDAT_AM_PM_FIELD, 954*0e209d39SAndroid Build Coastguard Worker HOUR1_FIELD = UDAT_HOUR1_FIELD, 955*0e209d39SAndroid Build Coastguard Worker HOUR0_FIELD = UDAT_HOUR0_FIELD, 956*0e209d39SAndroid Build Coastguard Worker TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD 957*0e209d39SAndroid Build Coastguard Worker }; 958*0e209d39SAndroid Build Coastguard Worker #endif /* U_HIDE_OBSOLETE_API */ 959*0e209d39SAndroid Build Coastguard Worker }; 960*0e209d39SAndroid Build Coastguard Worker 961*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 962*0e209d39SAndroid Build Coastguard Worker 963*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */ 964*0e209d39SAndroid Build Coastguard Worker 965*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */ 966*0e209d39SAndroid Build Coastguard Worker 967*0e209d39SAndroid Build Coastguard Worker #endif // _DATEFMT 968*0e209d39SAndroid Build Coastguard Worker //eof 969