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
00586 private:
00587 friend class DateFormat;
00588
00589 void initializeDefaultCentury(void);
00590
00591 SimpleDateFormat();
00592
00601 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00602
00611 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00612
00629 void subFormat( UnicodeString &appendTo,
00630 UChar ch,
00631 int32_t count,
00632 FieldPosition& pos,
00633 Calendar& cal,
00634 UErrorCode& status) const;
00635
00648 void zeroPaddingNumber( UnicodeString &appendTo,
00649 int32_t value,
00650 int32_t minDigits,
00651 int32_t maxDigits) const;
00652
00657 static UBool isNumeric(UChar formatChar, int32_t count);
00658
00666 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00667
00674 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00675
00685 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00686
00693 void initialize(const Locale& locale, UErrorCode& status);
00694
00707 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00708 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00709
00724 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00725 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal) const;
00726
00727 void parseInt(const UnicodeString& text,
00728 Formattable& number,
00729 ParsePosition& pos,
00730 UBool allowNegative) const;
00731
00744 static void translatePattern(const UnicodeString& originalPattern,
00745 UnicodeString& translatedPattern,
00746 const UnicodeString& from,
00747 const UnicodeString& to,
00748 UErrorCode& status);
00749
00757 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00758
00762 static const UCalendarDateFields fgPatternIndexToCalendarField[];
00763
00767 static const DateFormat::EField fgPatternIndexToDateFormatField[];
00768
00772 UnicodeString fPattern;
00773
00777 Locale fLocale;
00778
00783 DateFormatSymbols* fSymbols;
00784
00793 UDate fDefaultCenturyStart;
00794
00798 int32_t fDefaultCenturyStartYear;
00799
00800 UBool fHaveDefaultCentury;
00801 };
00802
00803 inline UDate
00804 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00805 {
00806 return fDefaultCenturyStart;
00807 }
00808
00809 inline UnicodeString&
00810 SimpleDateFormat::format(const Formattable& obj,
00811 UnicodeString& appendTo,
00812 UErrorCode& status) const {
00813
00814
00815 return DateFormat::format(obj, appendTo, status);
00816 }
00817
00818 inline UnicodeString&
00819 SimpleDateFormat::format(UDate date,
00820 UnicodeString& appendTo,
00821 FieldPosition& fieldPosition) const {
00822
00823
00824 return DateFormat::format(date, appendTo, fieldPosition);
00825 }
00826
00827 inline UnicodeString&
00828 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00829 return DateFormat::format(date, appendTo);
00830 }
00831
00832 U_NAMESPACE_END
00833
00834 #endif
00835
00836 #endif // _SMPDTFMT
00837