00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef SMPDTFMT_H
00024 #define SMPDTFMT_H
00025
00026 #include "unicode/utypes.h"
00027
00028 #if !UCONFIG_NO_FORMATTING
00029
00030 #include "unicode/datefmt.h"
00031
00032 U_NAMESPACE_BEGIN
00033
00034 class DateFormatSymbols;
00035 class DateFormat;
00036
00199 class U_I18N_API SimpleDateFormat: public DateFormat {
00200 public:
00210 SimpleDateFormat(UErrorCode& status);
00211
00223 SimpleDateFormat(const UnicodeString& pattern,
00224 UErrorCode& status);
00225
00238 SimpleDateFormat(const UnicodeString& pattern,
00239 const Locale& locale,
00240 UErrorCode& status);
00241
00251 SimpleDateFormat(const UnicodeString& pattern,
00252 DateFormatSymbols* formatDataToAdopt,
00253 UErrorCode& status);
00254
00264 SimpleDateFormat(const UnicodeString& pattern,
00265 const DateFormatSymbols& formatData,
00266 UErrorCode& status);
00267
00272 SimpleDateFormat(const SimpleDateFormat&);
00273
00278 SimpleDateFormat& operator=(const SimpleDateFormat&);
00279
00284 virtual ~SimpleDateFormat();
00285
00292 virtual Format* clone(void) const;
00293
00301 virtual UBool operator==(const Format& other) const;
00302
00319 virtual UnicodeString& format( Calendar& cal,
00320 UnicodeString& appendTo,
00321 FieldPosition& pos) const;
00322
00342 virtual UnicodeString& format( const Formattable& obj,
00343 UnicodeString& appendTo,
00344 FieldPosition& pos,
00345 UErrorCode& status) const;
00346
00357 UnicodeString& format(UDate date,
00358 UnicodeString& appendTo,
00359 FieldPosition& fieldPosition) const;
00360
00370 UnicodeString& format(const Formattable& obj,
00371 UnicodeString& appendTo,
00372 UErrorCode& status) const;
00373
00382 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00383
00403 virtual void parse( const UnicodeString& text,
00404 Calendar& cal,
00405 ParsePosition& pos) const;
00406
00426 UDate parse( const UnicodeString& text,
00427 ParsePosition& pos) const;
00428
00429
00445 virtual UDate parse( const UnicodeString& text,
00446 UErrorCode& status) const;
00447
00464 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00465
00481 UDate get2DigitYearStart(UErrorCode& status) const;
00482
00489 virtual UnicodeString& toPattern(UnicodeString& result) const;
00490
00507 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00508 UErrorCode& status) const;
00509
00518 virtual void applyPattern(const UnicodeString& pattern);
00519
00530 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00531 UErrorCode& status);
00532
00541 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00542
00549 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00550
00556 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00557
00569 static UClassID U_EXPORT2 getStaticClassID(void);
00570
00582 virtual UClassID getDynamicClassID(void) const;
00583
00593 virtual void adoptCalendar(Calendar* calendarToAdopt);
00594
00595 private:
00596 friend class DateFormat;
00597
00598 void initializeDefaultCentury(void);
00599
00600 SimpleDateFormat();
00601
00610 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00611
00620 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00621
00638 void subFormat( UnicodeString &appendTo,
00639 UChar ch,
00640 int32_t count,
00641 FieldPosition& pos,
00642 Calendar& cal,
00643 UErrorCode& status) const;
00644
00657 void zeroPaddingNumber( UnicodeString &appendTo,
00658 int32_t value,
00659 int32_t minDigits,
00660 int32_t maxDigits) const;
00661
00666 static UBool isNumeric(UChar formatChar, int32_t count);
00667
00675 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00676
00683 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00684
00694 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00695
00702 void initialize(const Locale& locale, UErrorCode& status);
00703
00716 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00717 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00718
00733 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00734 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal) const;
00735
00736 void parseInt(const UnicodeString& text,
00737 Formattable& number,
00738 ParsePosition& pos,
00739 UBool allowNegative) const;
00740
00753 static void translatePattern(const UnicodeString& originalPattern,
00754 UnicodeString& translatedPattern,
00755 const UnicodeString& from,
00756 const UnicodeString& to,
00757 UErrorCode& status);
00758
00766 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00767
00771 static const UCalendarDateFields fgPatternIndexToCalendarField[];
00772
00776 static const UDateFormatField fgPatternIndexToDateFormatField[];
00777
00781 UnicodeString fPattern;
00782
00786 Locale fLocale;
00787
00792 DateFormatSymbols* fSymbols;
00793
00802 UDate fDefaultCenturyStart;
00803
00807 int32_t fDefaultCenturyStartYear;
00808
00809 UBool fHaveDefaultCentury;
00810 };
00811
00812 inline UDate
00813 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00814 {
00815 return fDefaultCenturyStart;
00816 }
00817
00818 inline UnicodeString&
00819 SimpleDateFormat::format(const Formattable& obj,
00820 UnicodeString& appendTo,
00821 UErrorCode& status) const {
00822
00823
00824 return DateFormat::format(obj, appendTo, status);
00825 }
00826
00827 inline UnicodeString&
00828 SimpleDateFormat::format(UDate date,
00829 UnicodeString& appendTo,
00830 FieldPosition& fieldPosition) const {
00831
00832
00833 return DateFormat::format(date, appendTo, fieldPosition);
00834 }
00835
00836 inline UnicodeString&
00837 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00838 return DateFormat::format(date, appendTo);
00839 }
00840
00841 U_NAMESPACE_END
00842
00843 #endif
00844
00845 #endif // _SMPDTFMT
00846