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 #include "unicode/datefmt.h"
00028
00029 U_NAMESPACE_BEGIN
00030
00031 class DateFormatSymbols;
00032 class DateFormat;
00033
00175 class U_I18N_API SimpleDateFormat: public DateFormat {
00176 public:
00186 SimpleDateFormat(UErrorCode& status);
00187
00199 SimpleDateFormat(const UnicodeString& pattern,
00200 UErrorCode& status);
00201
00214 SimpleDateFormat(const UnicodeString& pattern,
00215 const Locale& locale,
00216 UErrorCode& status);
00217
00227 SimpleDateFormat(const UnicodeString& pattern,
00228 DateFormatSymbols* formatDataToAdopt,
00229 UErrorCode& status);
00230
00240 SimpleDateFormat(const UnicodeString& pattern,
00241 const DateFormatSymbols& formatData,
00242 UErrorCode& status);
00243
00248 SimpleDateFormat(const SimpleDateFormat&);
00249
00254 SimpleDateFormat& operator=(const SimpleDateFormat&);
00255
00260 virtual ~SimpleDateFormat();
00261
00268 virtual Format* clone(void) const;
00269
00277 virtual UBool operator==(const Format& other) const;
00278
00295 virtual UnicodeString& format( Calendar& cal,
00296 UnicodeString& toAppendTo,
00297 FieldPosition& pos) const;
00298
00318 virtual UnicodeString& format( const Formattable& obj,
00319 UnicodeString& toAppendTo,
00320 FieldPosition& pos,
00321 UErrorCode& status) const;
00322
00332 UnicodeString& format(UDate date,
00333 UnicodeString& result,
00334 FieldPosition& fieldPosition) const;
00335
00344 UnicodeString& format(const Formattable& obj,
00345 UnicodeString& result,
00346 UErrorCode& status) const;
00347
00355 UnicodeString& format(UDate date, UnicodeString& result) const;
00356
00376 virtual void parse( const UnicodeString& text,
00377 Calendar& cal,
00378 ParsePosition& pos) const;
00379
00399 UDate parse( const UnicodeString& text,
00400 ParsePosition& pos) const;
00401
00402
00418 virtual UDate parse( const UnicodeString& text,
00419 UErrorCode& status) const;
00420
00437 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00438
00454 UDate get2DigitYearStart(UErrorCode& status) const;
00455
00462 virtual UnicodeString& toPattern(UnicodeString& result) const;
00463
00480 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00481 UErrorCode& status) const;
00482
00491 virtual void applyPattern(const UnicodeString& pattern);
00492
00503 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00504 UErrorCode& status);
00505
00514 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00515
00522 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00523
00529 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00530
00542 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00543
00555 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00556
00557 private:
00558 static const char fgClassID;
00559
00560 static const char fgDateTimePatternsTag[];
00561
00562 static const UChar fgDefaultPattern[];
00563
00564 friend class DateFormat;
00565
00578
00579
00580 void initializeDefaultCentury(void);
00581
00590 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00591
00600 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00601
00621 UnicodeString& subFormat( UnicodeString& result,
00622 UChar ch,
00623 int32_t count,
00624 int32_t beginOffset,
00625 FieldPosition& pos,
00626 Calendar& cal,
00627 UErrorCode& status) const;
00628
00639 UnicodeString& zeroPaddingNumber(UnicodeString& result,
00640 int32_t value,
00641 int32_t minDigits,
00642 int32_t maxDigits) const;
00643
00653 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00654
00661 void initialize(const Locale& locale, UErrorCode& status);
00662
00675 int32_t matchString(const UnicodeString& text, int32_t start, Calendar::EDateFields field,
00676 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00677
00692 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00693 UBool obeyCount, UBool ambiguousYear[], Calendar& cal) const;
00694
00702
00703
00716 static void translatePattern(const UnicodeString& originalPattern,
00717 UnicodeString& translatedPattern,
00718 const UnicodeString& from,
00719 const UnicodeString& to,
00720 UErrorCode& status);
00725
00726
00734 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00735
00742 UDate internalGetDefaultCenturyStart(void) const;
00743
00750 int32_t internalGetDefaultCenturyStartYear(void) const;
00751
00756 static void initializeSystemDefaultCentury(void);
00757
00761
00762
00763 static const UChar fgGmtPlus[];
00764 static const UChar fgGmtMinus[];
00765 static const UChar fgGmt[];
00766
00770 static const Calendar::EDateFields fgPatternIndexToCalendarField[];
00771
00775 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00776
00780 UnicodeString fPattern;
00781
00786 DateFormatSymbols* fSymbols;
00787
00796 UDate fDefaultCenturyStart;
00797
00801 int32_t fDefaultCenturyStartYear;
00802
00809 static UDate fgSystemDefaultCenturyStart;
00810
00814 static int32_t fgSystemDefaultCenturyStartYear;
00815
00819 static const int32_t fgSystemDefaultCenturyYear;
00820
00821 public:
00826 static const UDate fgSystemDefaultCentury;
00827 };
00828
00829 inline UDate
00830 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00831 {
00832 return fDefaultCenturyStart;
00833 }
00834
00835 inline UnicodeString&
00836 SimpleDateFormat::format(const Formattable& obj,
00837 UnicodeString& result,
00838 UErrorCode& status) const {
00839
00840
00841 return DateFormat::format(obj, result, status);
00842 }
00843
00844 inline UnicodeString&
00845 SimpleDateFormat::format(UDate date,
00846 UnicodeString& result,
00847 FieldPosition& fieldPosition) const {
00848
00849
00850 return DateFormat::format(date, result, fieldPosition);
00851 }
00852
00853 inline UnicodeString&
00854 SimpleDateFormat::format(UDate date, UnicodeString& result) const {
00855 return DateFormat::format(date, result);
00856 }
00857
00858 U_NAMESPACE_END
00859
00860 #endif // _SMPDTFMT
00861