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
00279 virtual UnicodeString& format( UDate date,
00280 UnicodeString& toAppendTo,
00281 FieldPosition& pos) const;
00282
00301 virtual UnicodeString& format( const Formattable& obj,
00302 UnicodeString& toAppendTo,
00303 FieldPosition& pos,
00304 UErrorCode& status) const;
00305
00310 UnicodeString& format(const Formattable& obj,
00311 UnicodeString& result,
00312 UErrorCode& status) const;
00313
00318 UnicodeString& format(UDate date, UnicodeString& result) const;
00319
00339 virtual UDate parse( const UnicodeString& text,
00340 ParsePosition& pos) const;
00341
00342
00358 virtual UDate parse( const UnicodeString& text,
00359 UErrorCode& status) const;
00360
00374 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00375
00389 UDate get2DigitYearStart(UErrorCode& status) const;
00390
00395 virtual UnicodeString& toPattern(UnicodeString& result) const;
00396
00412 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00413 UErrorCode& status) const;
00414
00423 virtual void applyPattern(const UnicodeString& pattern);
00424
00435 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00436 UErrorCode& status);
00437
00446 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00447
00454 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00455
00461 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00462
00474 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; }
00475
00487 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
00488
00489 private:
00490 static const char fgClassID;
00491
00492 static const char fgDateTimePatternsTag[];
00493
00494 static const UChar fgDefaultPattern[];
00495
00496 friend class DateFormat;
00497
00510
00511
00512 void initializeDefaultCentury(void);
00513
00517 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00518
00524 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00525
00545 UnicodeString& subFormat( UnicodeString& result,
00546 UChar ch,
00547 int32_t count,
00548 int32_t beginOffset,
00549 FieldPosition& pos,
00550 UErrorCode& status) const;
00551
00562 UnicodeString& zeroPaddingNumber(UnicodeString& result,
00563 int32_t value,
00564 int32_t minDigits,
00565 int32_t maxDigits) const;
00566
00576 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00577
00584 void initialize(const Locale& locale, UErrorCode& status);
00585
00595 int32_t matchString(const UnicodeString& text, UTextOffset start, Calendar::EDateFields field,
00596 const UnicodeString* stringArray, int32_t stringArrayCount) const;
00597
00609 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00610 UBool obeyCount, UBool ambiguousYear[]) const;
00611
00619
00620
00627 static void translatePattern(const UnicodeString& originalPattern,
00628 UnicodeString& translatedPattern,
00629 const UnicodeString& from,
00630 const UnicodeString& to,
00631 UErrorCode& status);
00636
00637
00642 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00643
00648 UDate internalGetDefaultCenturyStart(void) const;
00649
00654 int32_t internalGetDefaultCenturyStartYear(void) const;
00655
00660 static void initializeSystemDefaultCentury(void);
00661
00665
00666
00667 static const UChar fgGmtPlus[];
00668 static const UChar fgGmtMinus[];
00669 static const UChar fgGmt[];
00670
00674 static const Calendar::EDateFields fgPatternIndexToCalendarField[];
00675
00679 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00680
00684 UnicodeString fPattern;
00685
00690 DateFormatSymbols* fSymbols;
00691
00700 UDate fDefaultCenturyStart;
00701
00705 int32_t fDefaultCenturyStartYear;
00706
00713 static UDate fgSystemDefaultCenturyStart;
00714
00718 static int32_t fgSystemDefaultCenturyStartYear;
00719
00723 static const int32_t fgSystemDefaultCenturyYear;
00724
00725 public:
00730 static const UDate fgSystemDefaultCentury;
00731 };
00732
00733 inline UDate
00734 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00735 {
00736 return fDefaultCenturyStart;
00737 }
00738
00739 inline UnicodeString&
00740 SimpleDateFormat::format(const Formattable& obj,
00741 UnicodeString& result,
00742 UErrorCode& status) const {
00743
00744
00745 return DateFormat::format(obj, result, status);
00746 }
00747
00748 inline UnicodeString&
00749 SimpleDateFormat::format(UDate date, UnicodeString& result) const {
00750 return DateFormat::format(date, result);
00751 }
00752
00753 U_NAMESPACE_END
00754
00755 #endif // _SMPDTFMT
00756