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 class DateFormatSymbols;
00029 class DateFormat;
00030
00172 class U_I18N_API SimpleDateFormat: public DateFormat {
00173 public:
00182 SimpleDateFormat(UErrorCode& status);
00183
00193 SimpleDateFormat(const UnicodeString& pattern,
00194 UErrorCode& status);
00195
00205 SimpleDateFormat(const UnicodeString& pattern,
00206 const Locale& locale,
00207 UErrorCode& status);
00208
00215 SimpleDateFormat(const UnicodeString& pattern,
00216 DateFormatSymbols* formatDataToAdopt,
00217 UErrorCode& status);
00218
00225 SimpleDateFormat(const UnicodeString& pattern,
00226 const DateFormatSymbols& formatData,
00227 UErrorCode& status);
00228
00233 SimpleDateFormat(const SimpleDateFormat&);
00234
00239 SimpleDateFormat& operator=(const SimpleDateFormat&);
00240
00245 virtual ~SimpleDateFormat();
00246
00252 virtual Format* clone(void) const;
00253
00259 virtual UBool operator==(const Format& other) const;
00260
00276 virtual UnicodeString& format( UDate date,
00277 UnicodeString& toAppendTo,
00278 FieldPosition& pos) const;
00279
00298 virtual UnicodeString& format( const Formattable& obj,
00299 UnicodeString& toAppendTo,
00300 FieldPosition& pos,
00301 UErrorCode& status) const;
00302
00307 UnicodeString& format(const Formattable& obj,
00308 UnicodeString& result,
00309 UErrorCode& status) const;
00310
00315 UnicodeString& format(UDate date, UnicodeString& result) const;
00316
00336 virtual UDate parse( const UnicodeString& text,
00337 ParsePosition& pos) const;
00338
00339
00355 virtual UDate parse( const UnicodeString& text,
00356 UErrorCode& status) const;
00357
00371 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00372
00386 UDate get2DigitYearStart(UErrorCode& status) const;
00387
00392 virtual UnicodeString& toPattern(UnicodeString& result) const;
00393
00409 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00410 UErrorCode& status) const;
00411
00420 virtual void applyPattern(const UnicodeString& pattern);
00421
00432 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00433 UErrorCode& status);
00434
00443 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00444
00451 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00452
00458 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00459
00460
00461 public:
00465 static const char *fgErasTag;
00466 static const char *fgMonthNamesTag;
00467 static const char *fgMonthAbbreviationsTag;
00468 static const char *fgDayNamesTag;
00469 static const char *fgDayAbbreviationsTag;
00470 static const char *fgAmPmMarkersTag;
00471 static const char *fgDateTimePatternsTag;
00472
00473 static const char *fgZoneStringsTag;
00474 static const char *fgLocalPatternCharsTag;
00475
00476 static const UnicodeString fgDefaultPattern;
00477
00478 public:
00490 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00491
00503 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00504
00505 private:
00506 static char fgClassID;
00507
00508 friend class DateFormat;
00509
00522
00523
00524 void initializeDefaultCentury(void);
00525
00529 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00530
00536 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00537
00558 UnicodeString& subFormat( UnicodeString& result,
00559 UChar ch,
00560 int32_t count,
00561 int32_t beginOffset,
00562 FieldPosition& pos,
00563 UErrorCode& status) const;
00564
00575 UnicodeString& zeroPaddingNumber(UnicodeString& result,
00576 int32_t value,
00577 int32_t minDigits,
00578 int32_t maxDigits) const;
00579
00589 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00590
00597 void initialize(const Locale& locale, UErrorCode& status);
00598
00608 int32_t matchString(const UnicodeString& text, UTextOffset start, Calendar::EDateFields field,
00609 const UnicodeString* stringArray, int32_t stringArrayCount) const;
00610
00623 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00624 UBool obeyCount, UBool ambiguousYear[]) const;
00625
00633
00634
00641 static void translatePattern(const UnicodeString& originalPattern,
00642 UnicodeString& translatedPattern,
00643 const UnicodeString& from,
00644 const UnicodeString& to,
00645 UErrorCode& status);
00650
00651
00656 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00657
00662 UDate internalGetDefaultCenturyStart(void) const;
00663
00668 int32_t internalGetDefaultCenturyStartYear(void) const;
00669
00674 static void initializeSystemDefaultCentury(void);
00675
00679
00680
00681 static const UnicodeString fgGmtPlus;
00682 static const UnicodeString fgGmtMinus;
00683 static const UnicodeString fgGmt;
00684
00688 static const Calendar::EDateFields fgPatternIndexToCalendarField[];
00689
00693 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00694
00698 UnicodeString fPattern;
00699
00704 DateFormatSymbols* fSymbols;
00705
00714 UDate fDefaultCenturyStart;
00715
00719 int32_t fDefaultCenturyStartYear;
00720
00727 static UDate fgSystemDefaultCenturyStart;
00728
00732 static int32_t fgSystemDefaultCenturyStartYear;
00733
00737 static const int32_t fgSystemDefaultCenturyYear;
00738
00739 public:
00744 static const UDate fgSystemDefaultCentury;
00745 };
00746
00747 inline UDate
00748 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00749 {
00750 return fDefaultCenturyStart;
00751 }
00752
00753 inline UnicodeString&
00754 SimpleDateFormat::format(const Formattable& obj,
00755 UnicodeString& result,
00756 UErrorCode& status) const {
00757
00758
00759 return DateFormat::format(obj, result, status);
00760 }
00761
00762 inline UnicodeString&
00763 SimpleDateFormat::format(UDate date, UnicodeString& result) const {
00764 return DateFormat::format(date, result);
00765 }
00766
00767 #endif // _SMPDTFMT
00768