ICU 49.1.1
49.1.1
|
00001 /* 00002 * Copyright (C) 1997-2012, International Business Machines Corporation and 00003 * others. All Rights Reserved. 00004 ******************************************************************************* 00005 * 00006 * File SMPDTFMT.H 00007 * 00008 * Modification History: 00009 * 00010 * Date Name Description 00011 * 02/19/97 aliu Converted from java. 00012 * 07/09/97 helena Make ParsePosition into a class. 00013 * 07/21/98 stephen Added GMT_PLUS, GMT_MINUS 00014 * Changed setTwoDigitStartDate to set2DigitYearStart 00015 * Changed getTwoDigitStartDate to get2DigitYearStart 00016 * Removed subParseLong 00017 * Removed getZoneIndex (added in DateFormatSymbols) 00018 * 06/14/99 stephen Removed fgTimeZoneDataSuffix 00019 * 10/14/99 aliu Updated class doc to describe 2-digit year parsing 00020 * {j28 4182066}. 00021 ******************************************************************************* 00022 */ 00023 00024 #ifndef SMPDTFMT_H 00025 #define SMPDTFMT_H 00026 00027 #include "unicode/utypes.h" 00028 00034 #if !UCONFIG_NO_FORMATTING 00035 00036 #include "unicode/datefmt.h" 00037 00038 U_NAMESPACE_BEGIN 00039 00040 class DateFormatSymbols; 00041 class DateFormat; 00042 class MessageFormat; 00043 class FieldPositionHandler; 00044 class TimeZoneFormat; 00045 00225 class U_I18N_API SimpleDateFormat: public DateFormat { 00226 public: 00236 SimpleDateFormat(UErrorCode& status); 00237 00249 SimpleDateFormat(const UnicodeString& pattern, 00250 UErrorCode& status); 00251 00273 SimpleDateFormat(const UnicodeString& pattern, 00274 const UnicodeString& override, 00275 UErrorCode& status); 00276 00289 SimpleDateFormat(const UnicodeString& pattern, 00290 const Locale& locale, 00291 UErrorCode& status); 00292 00314 SimpleDateFormat(const UnicodeString& pattern, 00315 const UnicodeString& override, 00316 const Locale& locale, 00317 UErrorCode& status); 00318 00328 SimpleDateFormat(const UnicodeString& pattern, 00329 DateFormatSymbols* formatDataToAdopt, 00330 UErrorCode& status); 00331 00341 SimpleDateFormat(const UnicodeString& pattern, 00342 const DateFormatSymbols& formatData, 00343 UErrorCode& status); 00344 00349 SimpleDateFormat(const SimpleDateFormat&); 00350 00355 SimpleDateFormat& operator=(const SimpleDateFormat&); 00356 00361 virtual ~SimpleDateFormat(); 00362 00369 virtual Format* clone(void) const; 00370 00378 virtual UBool operator==(const Format& other) const; 00379 00380 00381 using DateFormat::format; 00382 00399 virtual UnicodeString& format( Calendar& cal, 00400 UnicodeString& appendTo, 00401 FieldPosition& pos) const; 00402 00403 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ 00428 virtual UnicodeString& format( Calendar& cal, 00429 const UDateFormatContextType* types, 00430 const UDateFormatContextValue* values, 00431 int32_t typesAndValuesCount, 00432 UnicodeString& appendTo, 00433 FieldPosition& pos) const; 00434 00453 virtual UnicodeString& format( Calendar& cal, 00454 UnicodeString& appendTo, 00455 FieldPositionIterator* posIter, 00456 UErrorCode& status) const; 00457 00477 virtual UnicodeString& format( const Formattable& obj, 00478 UnicodeString& appendTo, 00479 FieldPosition& pos, 00480 UErrorCode& status) const; 00481 00502 virtual UnicodeString& format( const Formattable& obj, 00503 UnicodeString& appendTo, 00504 FieldPositionIterator* posIter, 00505 UErrorCode& status) const; 00506 00517 UnicodeString& format(UDate date, 00518 UnicodeString& appendTo, 00519 FieldPosition& fieldPosition) const; 00520 00533 UnicodeString& format(UDate date, 00534 UnicodeString& appendTo, 00535 FieldPositionIterator* posIter, 00536 UErrorCode& status) const; 00537 00547 UnicodeString& format(const Formattable& obj, 00548 UnicodeString& appendTo, 00549 UErrorCode& status) const; 00550 00559 UnicodeString& format(UDate date, UnicodeString& appendTo) const; 00560 00588 virtual void parse( const UnicodeString& text, 00589 Calendar& cal, 00590 ParsePosition& pos) const; 00591 00622 UDate parse( const UnicodeString& text, 00623 ParsePosition& pos) const; 00624 00625 00659 virtual UDate parse( const UnicodeString& text, 00660 UErrorCode& status) const; 00661 00678 virtual void set2DigitYearStart(UDate d, UErrorCode& status); 00679 00695 UDate get2DigitYearStart(UErrorCode& status) const; 00696 00703 virtual UnicodeString& toPattern(UnicodeString& result) const; 00704 00721 virtual UnicodeString& toLocalizedPattern(UnicodeString& result, 00722 UErrorCode& status) const; 00723 00732 virtual void applyPattern(const UnicodeString& pattern); 00733 00744 virtual void applyLocalizedPattern(const UnicodeString& pattern, 00745 UErrorCode& status); 00746 00755 virtual const DateFormatSymbols* getDateFormatSymbols(void) const; 00756 00763 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols); 00764 00770 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols); 00771 00783 static UClassID U_EXPORT2 getStaticClassID(void); 00784 00796 virtual UClassID getDynamicClassID(void) const; 00797 00807 virtual void adoptCalendar(Calendar* calendarToAdopt); 00808 00809 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ 00820 virtual void setDefaultContext(UDateFormatContextType type, UDateFormatContextValue value, 00821 UErrorCode& status); 00822 00823 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ 00834 virtual int32_t getDefaultContext(UDateFormatContextType type, UErrorCode& status) const; 00835 00836 #ifndef U_HIDE_INTERNAL_API 00837 00844 virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt); 00845 00851 virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat); 00852 00858 virtual const TimeZoneFormat* getTimeZoneFormat(void) const; 00859 #endif /* U_HIDE_INTERNAL_API */ 00860 00861 #ifndef U_HIDE_INTERNAL_API 00862 00872 UBool isFieldUnitIgnored(UCalendarDateFields field) const; 00873 00874 00886 static UBool isFieldUnitIgnored(const UnicodeString& pattern, 00887 UCalendarDateFields field); 00888 00897 const Locale& getSmpFmtLocale(void) const; 00898 #endif /* U_HIDE_INTERNAL_API */ 00899 00900 private: 00901 friend class DateFormat; 00902 00903 void initializeDefaultCentury(void); 00904 00905 SimpleDateFormat(); // default constructor not implemented 00906 00915 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 00916 00925 SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern 00926 00930 UnicodeString& _format(Calendar& cal, UDateFormatContextValue capitalizationContext, 00931 UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const; 00932 00949 void subFormat(UnicodeString &appendTo, 00950 UChar ch, 00951 int32_t count, 00952 UDateFormatContextValue capitalizationContext, 00953 int32_t fieldNum, 00954 FieldPositionHandler& handler, 00955 Calendar& cal, 00956 UErrorCode& status) const; // in case of illegal argument 00957 00971 void zeroPaddingNumber(NumberFormat *currentNumberFormat, 00972 UnicodeString &appendTo, 00973 int32_t value, 00974 int32_t minDigits, 00975 int32_t maxDigits) const; 00976 00981 static UBool isNumeric(UChar formatChar, int32_t count); 00982 00990 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status); 00991 00998 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status); 00999 01009 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 01010 01017 void initialize(const Locale& locale, UErrorCode& status); 01018 01032 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field, 01033 const UnicodeString* stringArray, int32_t stringArrayCount, 01034 const UnicodeString* monthPattern, Calendar& cal) const; 01035 01048 int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field, 01049 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; 01050 01064 static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset, 01065 const UnicodeString &text, int32_t &textOffset, UBool lenient); 01066 01085 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count, 01086 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal, 01087 int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const; 01088 01089 void parseInt(const UnicodeString& text, 01090 Formattable& number, 01091 ParsePosition& pos, 01092 UBool allowNegative, 01093 NumberFormat *fmt) const; 01094 01095 void parseInt(const UnicodeString& text, 01096 Formattable& number, 01097 int32_t maxDigits, 01098 ParsePosition& pos, 01099 UBool allowNegative, 01100 NumberFormat *fmt) const; 01101 01102 int32_t checkIntSuffix(const UnicodeString& text, int32_t start, 01103 int32_t patLoc, UBool isNegative) const; 01104 01117 static void translatePattern(const UnicodeString& originalPattern, 01118 UnicodeString& translatedPattern, 01119 const UnicodeString& from, 01120 const UnicodeString& to, 01121 UErrorCode& status); 01122 01130 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); 01131 01141 int32_t compareSimpleAffix(const UnicodeString& affix, 01142 const UnicodeString& input, 01143 int32_t pos) const; 01144 01149 int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const; 01150 01155 int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const; 01156 01160 void initNumberFormatters(const Locale &locale,UErrorCode &status); 01161 01165 NumberFormat * getNumberFormatByIndex(UDateFormatField index) const; 01166 01170 void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status); 01171 01175 static const UCalendarDateFields fgPatternIndexToCalendarField[]; 01176 01180 static const UDateFormatField fgPatternIndexToDateFormatField[]; 01181 01185 TimeZoneFormat *tzFormat() const; 01186 01193 static const int32_t fgCalendarFieldToLevel[]; 01194 static const int32_t fgPatternCharToLevel[]; 01195 01199 UnicodeString fPattern; 01200 01204 UnicodeString fDateOverride; 01205 01209 UnicodeString fTimeOverride; 01210 01211 01215 Locale fLocale; 01216 01221 DateFormatSymbols* fSymbols; // Owned 01222 01226 TimeZoneFormat* fTimeZoneFormat; 01227 01236 UDate fDefaultCenturyStart; 01237 01241 /*transient*/ int32_t fDefaultCenturyStartYear; 01242 01243 int32_t tztype; // here to avoid api change 01244 01245 typedef struct NSOverride { 01246 NumberFormat *nf; 01247 int32_t hash; 01248 NSOverride *next; 01249 } NSOverride; 01250 01251 NumberFormat **fNumberFormatters; 01252 01253 NSOverride *fOverrideList; 01254 01255 UBool fHaveDefaultCentury; 01256 01257 UDateFormatContextValue fDefaultCapitalizationContext; 01258 }; 01259 01260 inline UDate 01261 SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const 01262 { 01263 return fDefaultCenturyStart; 01264 } 01265 01266 inline UnicodeString& 01267 SimpleDateFormat::format(const Formattable& obj, 01268 UnicodeString& appendTo, 01269 UErrorCode& status) const { 01270 // Don't use Format:: - use immediate base class only, 01271 // in case immediate base modifies behavior later. 01272 return DateFormat::format(obj, appendTo, status); 01273 } 01274 01275 inline UnicodeString& 01276 SimpleDateFormat::format(const Formattable& obj, 01277 UnicodeString& appendTo, 01278 FieldPosition& pos, 01279 UErrorCode& status) const 01280 { 01281 // Don't use Format:: - use immediate base class only, 01282 // in case immediate base modifies behavior later. 01283 return DateFormat::format(obj, appendTo, pos, status); 01284 } 01285 01286 inline UnicodeString& 01287 SimpleDateFormat::format(const Formattable& obj, 01288 UnicodeString& appendTo, 01289 FieldPositionIterator* posIter, 01290 UErrorCode& status) const 01291 { 01292 // Don't use Format:: - use immediate base class only, 01293 // in case immediate base modifies behavior later. 01294 return DateFormat::format(obj, appendTo, posIter, status); 01295 } 01296 01297 inline UnicodeString& 01298 SimpleDateFormat::format(UDate date, 01299 UnicodeString& appendTo, 01300 FieldPosition& fieldPosition) const { 01301 // Don't use Format:: - use immediate base class only, 01302 // in case immediate base modifies behavior later. 01303 return DateFormat::format(date, appendTo, fieldPosition); 01304 } 01305 01306 inline UnicodeString& 01307 SimpleDateFormat::format(UDate date, 01308 UnicodeString& appendTo, 01309 FieldPositionIterator* posIter, 01310 UErrorCode& status) const { 01311 // Don't use Format:: - use immediate base class only, 01312 // in case immediate base modifies behavior later. 01313 return DateFormat::format(date, appendTo, posIter, status); 01314 } 01315 01316 inline UnicodeString& 01317 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const { 01318 return DateFormat::format(date, appendTo); 01319 } 01320 01321 U_NAMESPACE_END 01322 01323 #endif /* #if !UCONFIG_NO_FORMATTING */ 01324 01325 #endif // _SMPDTFMT 01326 //eof