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
00178 class U_I18N_API SimpleDateFormat: public DateFormat {
00179 public:
00189 SimpleDateFormat(UErrorCode& status);
00190
00202 SimpleDateFormat(const UnicodeString& pattern,
00203 UErrorCode& status);
00204
00217 SimpleDateFormat(const UnicodeString& pattern,
00218 const Locale& locale,
00219 UErrorCode& status);
00220
00230 SimpleDateFormat(const UnicodeString& pattern,
00231 DateFormatSymbols* formatDataToAdopt,
00232 UErrorCode& status);
00233
00243 SimpleDateFormat(const UnicodeString& pattern,
00244 const DateFormatSymbols& formatData,
00245 UErrorCode& status);
00246
00251 SimpleDateFormat(const SimpleDateFormat&);
00252
00257 SimpleDateFormat& operator=(const SimpleDateFormat&);
00258
00263 virtual ~SimpleDateFormat();
00264
00271 virtual Format* clone(void) const;
00272
00280 virtual UBool operator==(const Format& other) const;
00281
00298 virtual UnicodeString& format( Calendar& cal,
00299 UnicodeString& appendTo,
00300 FieldPosition& pos) const;
00301
00321 virtual UnicodeString& format( const Formattable& obj,
00322 UnicodeString& appendTo,
00323 FieldPosition& pos,
00324 UErrorCode& status) const;
00325
00336 UnicodeString& format(UDate date,
00337 UnicodeString& appendTo,
00338 FieldPosition& fieldPosition) const;
00339
00349 UnicodeString& format(const Formattable& obj,
00350 UnicodeString& appendTo,
00351 UErrorCode& status) const;
00352
00361 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00362
00382 virtual void parse( const UnicodeString& text,
00383 Calendar& cal,
00384 ParsePosition& pos) const;
00385
00405 UDate parse( const UnicodeString& text,
00406 ParsePosition& pos) const;
00407
00408
00424 virtual UDate parse( const UnicodeString& text,
00425 UErrorCode& status) const;
00426
00443 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00444
00460 UDate get2DigitYearStart(UErrorCode& status) const;
00461
00468 virtual UnicodeString& toPattern(UnicodeString& result) const;
00469
00486 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00487 UErrorCode& status) const;
00488
00497 virtual void applyPattern(const UnicodeString& pattern);
00498
00509 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00510 UErrorCode& status);
00511
00520 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00521
00528 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00529
00535 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00536
00548 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00549
00561 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00562
00563 private:
00564 static const char fgClassID;
00565
00566 static const char fgDateTimePatternsTag[];
00567
00568 static const UChar fgDefaultPattern[];
00569
00570 friend class DateFormat;
00571
00584
00585
00586 void initializeDefaultCentury(void);
00587
00596 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00597
00606 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00607
00624 void subFormat( UnicodeString &appendTo,
00625 UChar ch,
00626 int32_t count,
00627 FieldPosition& pos,
00628 Calendar& cal,
00629 UErrorCode& status) const;
00630
00643 void zeroPaddingNumber( UnicodeString &appendTo,
00644 int32_t value,
00645 int32_t minDigits,
00646 int32_t maxDigits) const;
00647
00657 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00658
00665 void initialize(const Locale& locale, UErrorCode& status);
00666
00679 int32_t matchString(const UnicodeString& text, int32_t start, Calendar::EDateFields field,
00680 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00681
00696 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00697 UBool obeyCount, UBool ambiguousYear[], Calendar& cal) const;
00698
00706
00707
00720 static void translatePattern(const UnicodeString& originalPattern,
00721 UnicodeString& translatedPattern,
00722 const UnicodeString& from,
00723 const UnicodeString& to,
00724 UErrorCode& status);
00729
00730
00738 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00739
00746 UDate internalGetDefaultCenturyStart(void) const;
00747
00754 int32_t internalGetDefaultCenturyStartYear(void) const;
00755
00760 static void initializeSystemDefaultCentury(void);
00761
00765
00766
00767 static const UChar fgGmtPlus[];
00768 static const UChar fgGmtMinus[];
00769 static const UChar fgGmt[];
00770
00774 static const Calendar::EDateFields fgPatternIndexToCalendarField[];
00775
00779 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00780
00784 UnicodeString fPattern;
00785
00790 DateFormatSymbols* fSymbols;
00791
00800 UDate fDefaultCenturyStart;
00801
00805 int32_t fDefaultCenturyStartYear;
00806
00813 static UDate fgSystemDefaultCenturyStart;
00814
00818 static int32_t fgSystemDefaultCenturyStartYear;
00819
00823 static const int32_t fgSystemDefaultCenturyYear;
00824
00825 public:
00832 static const UDate fgSystemDefaultCentury;
00833
00834 };
00835
00836 inline UDate
00837 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00838 {
00839 return fDefaultCenturyStart;
00840 }
00841
00842 inline UnicodeString&
00843 SimpleDateFormat::format(const Formattable& obj,
00844 UnicodeString& appendTo,
00845 UErrorCode& status) const {
00846
00847
00848 return DateFormat::format(obj, appendTo, status);
00849 }
00850
00851 inline UnicodeString&
00852 SimpleDateFormat::format(UDate date,
00853 UnicodeString& appendTo,
00854 FieldPosition& fieldPosition) const {
00855
00856
00857 return DateFormat::format(date, appendTo, fieldPosition);
00858 }
00859
00860 inline UnicodeString&
00861 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00862 return DateFormat::format(date, appendTo);
00863 }
00864
00865 U_NAMESPACE_END
00866
00867 #endif
00868
00869 #endif // _SMPDTFMT
00870