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:
00185 SimpleDateFormat(UErrorCode& status);
00186
00196 SimpleDateFormat(const UnicodeString& pattern,
00197 UErrorCode& status);
00198
00208 SimpleDateFormat(const UnicodeString& pattern,
00209 const Locale& locale,
00210 UErrorCode& status);
00211
00218 SimpleDateFormat(const UnicodeString& pattern,
00219 DateFormatSymbols* formatDataToAdopt,
00220 UErrorCode& status);
00221
00228 SimpleDateFormat(const UnicodeString& pattern,
00229 const DateFormatSymbols& formatData,
00230 UErrorCode& status);
00231
00236 SimpleDateFormat(const SimpleDateFormat&);
00237
00242 SimpleDateFormat& operator=(const SimpleDateFormat&);
00243
00248 virtual ~SimpleDateFormat();
00249
00255 virtual Format* clone(void) const;
00256
00262 virtual UBool operator==(const Format& other) const;
00263
00280 virtual UnicodeString& format( Calendar& cal,
00281 UnicodeString& toAppendTo,
00282 FieldPosition& pos) const;
00283
00302 virtual UnicodeString& format( const Formattable& obj,
00303 UnicodeString& toAppendTo,
00304 FieldPosition& pos,
00305 UErrorCode& status) const;
00306
00311 UnicodeString& format(UDate date,
00312 UnicodeString& result,
00313 FieldPosition& fieldPosition) const;
00314
00319 UnicodeString& format(const Formattable& obj,
00320 UnicodeString& result,
00321 UErrorCode& status) const;
00322
00327 UnicodeString& format(UDate date, UnicodeString& result) const;
00328
00346 virtual void parse( const UnicodeString& text,
00347 Calendar& cal,
00348 ParsePosition& pos) const;
00349
00369 UDate parse( const UnicodeString& text,
00370 ParsePosition& pos) const;
00371
00372
00388 virtual UDate parse( const UnicodeString& text,
00389 UErrorCode& status) const;
00390
00404 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00405
00419 UDate get2DigitYearStart(UErrorCode& status) const;
00420
00425 virtual UnicodeString& toPattern(UnicodeString& result) const;
00426
00442 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00443 UErrorCode& status) const;
00444
00453 virtual void applyPattern(const UnicodeString& pattern);
00454
00465 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00466 UErrorCode& status);
00467
00476 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00477
00484 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00485
00491 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00492
00504 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00505
00517 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00518
00519 private:
00520 static const char fgClassID;
00521
00522 static const char fgDateTimePatternsTag[];
00523
00524 static const UChar fgDefaultPattern[];
00525
00526 friend class DateFormat;
00527
00540
00541
00542 void initializeDefaultCentury(void);
00543
00547 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00548
00554 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00555
00575 UnicodeString& subFormat( UnicodeString& result,
00576 UChar ch,
00577 int32_t count,
00578 int32_t beginOffset,
00579 FieldPosition& pos,
00580 Calendar& cal,
00581 UErrorCode& status) const;
00582
00593 UnicodeString& zeroPaddingNumber(UnicodeString& result,
00594 int32_t value,
00595 int32_t minDigits,
00596 int32_t maxDigits) const;
00597
00607 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00608
00615 void initialize(const Locale& locale, UErrorCode& status);
00616
00626 int32_t matchString(const UnicodeString& text, int32_t start, Calendar::EDateFields field,
00627 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00628
00640 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00641 UBool obeyCount, UBool ambiguousYear[], Calendar& cal) const;
00642
00650
00651
00658 static void translatePattern(const UnicodeString& originalPattern,
00659 UnicodeString& translatedPattern,
00660 const UnicodeString& from,
00661 const UnicodeString& to,
00662 UErrorCode& status);
00667
00668
00673 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00674
00679 UDate internalGetDefaultCenturyStart(void) const;
00680
00685 int32_t internalGetDefaultCenturyStartYear(void) const;
00686
00691 static void initializeSystemDefaultCentury(void);
00692
00696
00697
00698 static const UChar fgGmtPlus[];
00699 static const UChar fgGmtMinus[];
00700 static const UChar fgGmt[];
00701
00705 static const Calendar::EDateFields fgPatternIndexToCalendarField[];
00706
00710 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00711
00715 UnicodeString fPattern;
00716
00721 DateFormatSymbols* fSymbols;
00722
00731 UDate fDefaultCenturyStart;
00732
00736 int32_t fDefaultCenturyStartYear;
00737
00744 static UDate fgSystemDefaultCenturyStart;
00745
00749 static int32_t fgSystemDefaultCenturyStartYear;
00750
00754 static const int32_t fgSystemDefaultCenturyYear;
00755
00756 public:
00761 static const UDate fgSystemDefaultCentury;
00762 };
00763
00764 inline UDate
00765 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00766 {
00767 return fDefaultCenturyStart;
00768 }
00769
00770 inline UnicodeString&
00771 SimpleDateFormat::format(const Formattable& obj,
00772 UnicodeString& result,
00773 UErrorCode& status) const {
00774
00775
00776 return DateFormat::format(obj, result, status);
00777 }
00778
00779 inline UnicodeString&
00780 SimpleDateFormat::format(UDate date,
00781 UnicodeString& result,
00782 FieldPosition& fieldPosition) const {
00783
00784
00785 return DateFormat::format(date, result, fieldPosition);
00786 }
00787
00788 inline UnicodeString&
00789 SimpleDateFormat::format(UDate date, UnicodeString& result) const {
00790 return DateFormat::format(date, result);
00791 }
00792
00793 U_NAMESPACE_END
00794
00795 #endif // _SMPDTFMT
00796