|
ICU 51.2
51.2
|
00001 /* 00002 * Copyright (C) 1997-2013, 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 #include "unicode/udisplaycontext.h" 00038 00039 U_NAMESPACE_BEGIN 00040 00041 class DateFormatSymbols; 00042 class DateFormat; 00043 class MessageFormat; 00044 class FieldPositionHandler; 00045 class TimeZoneFormat; 00046 00703 class U_I18N_API SimpleDateFormat: public DateFormat { 00704 public: 00714 SimpleDateFormat(UErrorCode& status); 00715 00727 SimpleDateFormat(const UnicodeString& pattern, 00728 UErrorCode& status); 00729 00751 SimpleDateFormat(const UnicodeString& pattern, 00752 const UnicodeString& override, 00753 UErrorCode& status); 00754 00767 SimpleDateFormat(const UnicodeString& pattern, 00768 const Locale& locale, 00769 UErrorCode& status); 00770 00792 SimpleDateFormat(const UnicodeString& pattern, 00793 const UnicodeString& override, 00794 const Locale& locale, 00795 UErrorCode& status); 00796 00806 SimpleDateFormat(const UnicodeString& pattern, 00807 DateFormatSymbols* formatDataToAdopt, 00808 UErrorCode& status); 00809 00819 SimpleDateFormat(const UnicodeString& pattern, 00820 const DateFormatSymbols& formatData, 00821 UErrorCode& status); 00822 00827 SimpleDateFormat(const SimpleDateFormat&); 00828 00833 SimpleDateFormat& operator=(const SimpleDateFormat&); 00834 00839 virtual ~SimpleDateFormat(); 00840 00847 virtual Format* clone(void) const; 00848 00856 virtual UBool operator==(const Format& other) const; 00857 00858 00859 using DateFormat::format; 00860 00877 virtual UnicodeString& format( Calendar& cal, 00878 UnicodeString& appendTo, 00879 FieldPosition& pos) const; 00880 00899 virtual UnicodeString& format( Calendar& cal, 00900 UnicodeString& appendTo, 00901 FieldPositionIterator* posIter, 00902 UErrorCode& status) const; 00903 00923 virtual UnicodeString& format( const Formattable& obj, 00924 UnicodeString& appendTo, 00925 FieldPosition& pos, 00926 UErrorCode& status) const; 00927 00948 virtual UnicodeString& format( const Formattable& obj, 00949 UnicodeString& appendTo, 00950 FieldPositionIterator* posIter, 00951 UErrorCode& status) const; 00952 00963 UnicodeString& format(UDate date, 00964 UnicodeString& appendTo, 00965 FieldPosition& fieldPosition) const; 00966 00979 UnicodeString& format(UDate date, 00980 UnicodeString& appendTo, 00981 FieldPositionIterator* posIter, 00982 UErrorCode& status) const; 00983 00993 UnicodeString& format(const Formattable& obj, 00994 UnicodeString& appendTo, 00995 UErrorCode& status) const; 00996 01005 UnicodeString& format(UDate date, UnicodeString& appendTo) const; 01006 01033 virtual void parse( const UnicodeString& text, 01034 Calendar& cal, 01035 ParsePosition& pos) const; 01036 01067 UDate parse( const UnicodeString& text, 01068 ParsePosition& pos) const; 01069 01070 01104 virtual UDate parse( const UnicodeString& text, 01105 UErrorCode& status) const; 01106 01123 virtual void set2DigitYearStart(UDate d, UErrorCode& status); 01124 01140 UDate get2DigitYearStart(UErrorCode& status) const; 01141 01148 virtual UnicodeString& toPattern(UnicodeString& result) const; 01149 01166 virtual UnicodeString& toLocalizedPattern(UnicodeString& result, 01167 UErrorCode& status) const; 01168 01177 virtual void applyPattern(const UnicodeString& pattern); 01178 01189 virtual void applyLocalizedPattern(const UnicodeString& pattern, 01190 UErrorCode& status); 01191 01200 virtual const DateFormatSymbols* getDateFormatSymbols(void) const; 01201 01208 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols); 01209 01215 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols); 01216 01228 static UClassID U_EXPORT2 getStaticClassID(void); 01229 01241 virtual UClassID getDynamicClassID(void) const; 01242 01252 virtual void adoptCalendar(Calendar* calendarToAdopt); 01253 01254 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ 01264 virtual void setContext(UDisplayContext value, UErrorCode& status); 01265 01266 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ 01277 virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const; 01278 01279 /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */ 01287 virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt); 01288 01294 virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat); 01295 01301 virtual const TimeZoneFormat* getTimeZoneFormat(void) const; 01302 01303 #ifndef U_HIDE_INTERNAL_API 01304 01314 UBool isFieldUnitIgnored(UCalendarDateFields field) const; 01315 01316 01328 static UBool isFieldUnitIgnored(const UnicodeString& pattern, 01329 UCalendarDateFields field); 01330 01339 const Locale& getSmpFmtLocale(void) const; 01340 #endif /* U_HIDE_INTERNAL_API */ 01341 01342 private: 01343 friend class DateFormat; 01344 01345 void initializeDefaultCentury(void); 01346 01347 SimpleDateFormat(); // default constructor not implemented 01348 01357 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 01358 01367 SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern 01368 01372 UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const; 01373 01390 void subFormat(UnicodeString &appendTo, 01391 UChar ch, 01392 int32_t count, 01393 UDisplayContext capitalizationContext, 01394 int32_t fieldNum, 01395 FieldPositionHandler& handler, 01396 Calendar& cal, 01397 UErrorCode& status) const; // in case of illegal argument 01398 01412 void zeroPaddingNumber(NumberFormat *currentNumberFormat, 01413 UnicodeString &appendTo, 01414 int32_t value, 01415 int32_t minDigits, 01416 int32_t maxDigits) const; 01417 01422 static UBool isNumeric(UChar formatChar, int32_t count); 01423 01427 static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset); 01428 01432 static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset); 01433 01441 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status); 01442 01449 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status); 01450 01460 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 01461 01468 void initialize(const Locale& locale, UErrorCode& status); 01469 01483 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field, 01484 const UnicodeString* stringArray, int32_t stringArrayCount, 01485 const UnicodeString* monthPattern, Calendar& cal) const; 01486 01499 int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field, 01500 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; 01501 01515 static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset, 01516 const UnicodeString &text, int32_t &textOffset, UBool lenient); 01517 01536 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count, 01537 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal, 01538 int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const; 01539 01540 void parseInt(const UnicodeString& text, 01541 Formattable& number, 01542 ParsePosition& pos, 01543 UBool allowNegative, 01544 NumberFormat *fmt) const; 01545 01546 void parseInt(const UnicodeString& text, 01547 Formattable& number, 01548 int32_t maxDigits, 01549 ParsePosition& pos, 01550 UBool allowNegative, 01551 NumberFormat *fmt) const; 01552 01553 int32_t checkIntSuffix(const UnicodeString& text, int32_t start, 01554 int32_t patLoc, UBool isNegative) const; 01555 01568 static void translatePattern(const UnicodeString& originalPattern, 01569 UnicodeString& translatedPattern, 01570 const UnicodeString& from, 01571 const UnicodeString& to, 01572 UErrorCode& status); 01573 01581 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); 01582 01592 int32_t compareSimpleAffix(const UnicodeString& affix, 01593 const UnicodeString& input, 01594 int32_t pos) const; 01595 01600 int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const; 01601 01606 int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const; 01607 01611 void initNumberFormatters(const Locale &locale,UErrorCode &status); 01612 01616 NumberFormat * getNumberFormatByIndex(UDateFormatField index) const; 01617 01621 void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status); 01622 01626 static const UCalendarDateFields fgPatternIndexToCalendarField[]; 01627 01631 static const UDateFormatField fgPatternIndexToDateFormatField[]; 01632 01636 TimeZoneFormat *tzFormat() const; 01637 01644 static const int32_t fgCalendarFieldToLevel[]; 01645 static const int32_t fgPatternCharToLevel[]; 01646 01650 UnicodeString fPattern; 01651 01655 UnicodeString fDateOverride; 01656 01660 UnicodeString fTimeOverride; 01661 01662 01666 Locale fLocale; 01667 01672 DateFormatSymbols* fSymbols; // Owned 01673 01677 TimeZoneFormat* fTimeZoneFormat; 01678 01687 UDate fDefaultCenturyStart; 01688 01692 /*transient*/ int32_t fDefaultCenturyStartYear; 01693 01694 int32_t tztype; // here to avoid api change 01695 01696 typedef struct NSOverride { 01697 NumberFormat *nf; 01698 int32_t hash; 01699 NSOverride *next; 01700 } NSOverride; 01701 01702 NumberFormat **fNumberFormatters; 01703 01704 NSOverride *fOverrideList; 01705 01706 UBool fHaveDefaultCentury; 01707 01708 UDisplayContext fCapitalizationContext; 01709 }; 01710 01711 inline UDate 01712 SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const 01713 { 01714 return fDefaultCenturyStart; 01715 } 01716 01717 inline UnicodeString& 01718 SimpleDateFormat::format(const Formattable& obj, 01719 UnicodeString& appendTo, 01720 UErrorCode& status) const { 01721 // Don't use Format:: - use immediate base class only, 01722 // in case immediate base modifies behavior later. 01723 return DateFormat::format(obj, appendTo, status); 01724 } 01725 01726 inline UnicodeString& 01727 SimpleDateFormat::format(const Formattable& obj, 01728 UnicodeString& appendTo, 01729 FieldPosition& pos, 01730 UErrorCode& status) const 01731 { 01732 // Don't use Format:: - use immediate base class only, 01733 // in case immediate base modifies behavior later. 01734 return DateFormat::format(obj, appendTo, pos, status); 01735 } 01736 01737 inline UnicodeString& 01738 SimpleDateFormat::format(const Formattable& obj, 01739 UnicodeString& appendTo, 01740 FieldPositionIterator* posIter, 01741 UErrorCode& status) const 01742 { 01743 // Don't use Format:: - use immediate base class only, 01744 // in case immediate base modifies behavior later. 01745 return DateFormat::format(obj, appendTo, posIter, status); 01746 } 01747 01748 inline UnicodeString& 01749 SimpleDateFormat::format(UDate date, 01750 UnicodeString& appendTo, 01751 FieldPosition& fieldPosition) const { 01752 // Don't use Format:: - use immediate base class only, 01753 // in case immediate base modifies behavior later. 01754 return DateFormat::format(date, appendTo, fieldPosition); 01755 } 01756 01757 inline UnicodeString& 01758 SimpleDateFormat::format(UDate date, 01759 UnicodeString& appendTo, 01760 FieldPositionIterator* posIter, 01761 UErrorCode& status) const { 01762 // Don't use Format:: - use immediate base class only, 01763 // in case immediate base modifies behavior later. 01764 return DateFormat::format(date, appendTo, posIter, status); 01765 } 01766 01767 inline UnicodeString& 01768 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const { 01769 return DateFormat::format(date, appendTo); 01770 } 01771 01772 U_NAMESPACE_END 01773 01774 #endif /* #if !UCONFIG_NO_FORMATTING */ 01775 01776 #endif // _SMPDTFMT 01777 //eof
1.7.6.1