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
00190 class U_I18N_API SimpleDateFormat: public DateFormat {
00191 public:
00201 SimpleDateFormat(UErrorCode& status);
00202
00214 SimpleDateFormat(const UnicodeString& pattern,
00215 UErrorCode& status);
00216
00229 SimpleDateFormat(const UnicodeString& pattern,
00230 const Locale& locale,
00231 UErrorCode& status);
00232
00242 SimpleDateFormat(const UnicodeString& pattern,
00243 DateFormatSymbols* formatDataToAdopt,
00244 UErrorCode& status);
00245
00255 SimpleDateFormat(const UnicodeString& pattern,
00256 const DateFormatSymbols& formatData,
00257 UErrorCode& status);
00258
00263 SimpleDateFormat(const SimpleDateFormat&);
00264
00269 SimpleDateFormat& operator=(const SimpleDateFormat&);
00270
00275 virtual ~SimpleDateFormat();
00276
00283 virtual Format* clone(void) const;
00284
00292 virtual UBool operator==(const Format& other) const;
00293
00310 virtual UnicodeString& format( Calendar& cal,
00311 UnicodeString& appendTo,
00312 FieldPosition& pos) const;
00313
00333 virtual UnicodeString& format( const Formattable& obj,
00334 UnicodeString& appendTo,
00335 FieldPosition& pos,
00336 UErrorCode& status) const;
00337
00348 UnicodeString& format(UDate date,
00349 UnicodeString& appendTo,
00350 FieldPosition& fieldPosition) const;
00351
00361 UnicodeString& format(const Formattable& obj,
00362 UnicodeString& appendTo,
00363 UErrorCode& status) const;
00364
00373 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00374
00394 virtual void parse( const UnicodeString& text,
00395 Calendar& cal,
00396 ParsePosition& pos) const;
00397
00417 UDate parse( const UnicodeString& text,
00418 ParsePosition& pos) const;
00419
00420
00436 virtual UDate parse( const UnicodeString& text,
00437 UErrorCode& status) const;
00438
00455 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00456
00472 UDate get2DigitYearStart(UErrorCode& status) const;
00473
00480 virtual UnicodeString& toPattern(UnicodeString& result) const;
00481
00498 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00499 UErrorCode& status) const;
00500
00509 virtual void applyPattern(const UnicodeString& pattern);
00510
00521 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00522 UErrorCode& status);
00523
00532 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00533
00540 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00541
00547 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00548
00560 static UClassID getStaticClassID(void);
00561
00573 virtual UClassID getDynamicClassID(void) const;
00574
00584 virtual void adoptCalendar(Calendar* calendarToAdopt);
00585
00592 virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
00593
00600 virtual const char* getLocaleInternal(ULocDataLocaleType type, UErrorCode &status) const;
00601
00602 private:
00603 friend class DateFormat;
00604
00605 void initializeDefaultCentury(void);
00606
00607 SimpleDateFormat();
00608
00617 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00618
00627 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00628
00645 void subFormat( UnicodeString &appendTo,
00646 UChar ch,
00647 int32_t count,
00648 FieldPosition& pos,
00649 Calendar& cal,
00650 UErrorCode& status) const;
00651
00664 void zeroPaddingNumber( UnicodeString &appendTo,
00665 int32_t value,
00666 int32_t minDigits,
00667 int32_t maxDigits) const;
00668
00673 static UBool isNumeric(UChar formatChar, int32_t count);
00674
00682 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00683
00690 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00691
00701 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00702
00709 void initialize(const Locale& locale, UErrorCode& status);
00710
00723 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00724 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00725
00740 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00741 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal) const;
00742
00743 void parseInt(const UnicodeString& text,
00744 Formattable& number,
00745 ParsePosition& pos,
00746 UBool allowNegative) const;
00747
00760 static void translatePattern(const UnicodeString& originalPattern,
00761 UnicodeString& translatedPattern,
00762 const UnicodeString& from,
00763 const UnicodeString& to,
00764 UErrorCode& status);
00765
00773 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00774
00778 static const UCalendarDateFields fgPatternIndexToCalendarField[];
00779
00783 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00784
00788 UnicodeString fPattern;
00789
00793 Locale fLocale;
00794
00799 DateFormatSymbols* fSymbols;
00800
00809 UDate fDefaultCenturyStart;
00810
00814 int32_t fDefaultCenturyStartYear;
00815
00816 UBool fHaveDefaultCentury;
00817 };
00818
00819 inline UDate
00820 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00821 {
00822 return fDefaultCenturyStart;
00823 }
00824
00825 inline UnicodeString&
00826 SimpleDateFormat::format(const Formattable& obj,
00827 UnicodeString& appendTo,
00828 UErrorCode& status) const {
00829
00830
00831 return DateFormat::format(obj, appendTo, status);
00832 }
00833
00834 inline UnicodeString&
00835 SimpleDateFormat::format(UDate date,
00836 UnicodeString& appendTo,
00837 FieldPosition& fieldPosition) const {
00838
00839
00840 return DateFormat::format(date, appendTo, fieldPosition);
00841 }
00842
00843 inline UnicodeString&
00844 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00845 return DateFormat::format(date, appendTo);
00846 }
00847
00848 U_NAMESPACE_END
00849
00850 #endif
00851
00852 #endif // _SMPDTFMT
00853