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
00033 #if !UCONFIG_NO_FORMATTING
00034
00035 #include "unicode/datefmt.h"
00036
00037 U_NAMESPACE_BEGIN
00038
00039 class DateFormatSymbols;
00040 class DateFormat;
00041 class MessageFormat;
00042
00207 class U_I18N_API SimpleDateFormat: public DateFormat {
00208 public:
00218 SimpleDateFormat(UErrorCode& status);
00219
00231 SimpleDateFormat(const UnicodeString& pattern,
00232 UErrorCode& status);
00233
00246 SimpleDateFormat(const UnicodeString& pattern,
00247 const Locale& locale,
00248 UErrorCode& status);
00249
00259 SimpleDateFormat(const UnicodeString& pattern,
00260 DateFormatSymbols* formatDataToAdopt,
00261 UErrorCode& status);
00262
00272 SimpleDateFormat(const UnicodeString& pattern,
00273 const DateFormatSymbols& formatData,
00274 UErrorCode& status);
00275
00280 SimpleDateFormat(const SimpleDateFormat&);
00281
00286 SimpleDateFormat& operator=(const SimpleDateFormat&);
00287
00292 virtual ~SimpleDateFormat();
00293
00300 virtual Format* clone(void) const;
00301
00309 virtual UBool operator==(const Format& other) const;
00310
00327 virtual UnicodeString& format( Calendar& cal,
00328 UnicodeString& appendTo,
00329 FieldPosition& pos) const;
00330
00350 virtual UnicodeString& format( const Formattable& obj,
00351 UnicodeString& appendTo,
00352 FieldPosition& pos,
00353 UErrorCode& status) const;
00354
00365 UnicodeString& format(UDate date,
00366 UnicodeString& appendTo,
00367 FieldPosition& fieldPosition) const;
00368
00378 UnicodeString& format(const Formattable& obj,
00379 UnicodeString& appendTo,
00380 UErrorCode& status) const;
00381
00390 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00391
00411 virtual void parse( const UnicodeString& text,
00412 Calendar& cal,
00413 ParsePosition& pos) const;
00414
00434 UDate parse( const UnicodeString& text,
00435 ParsePosition& pos) const;
00436
00437
00453 virtual UDate parse( const UnicodeString& text,
00454 UErrorCode& status) const;
00455
00472 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00473
00489 UDate get2DigitYearStart(UErrorCode& status) const;
00490
00497 virtual UnicodeString& toPattern(UnicodeString& result) const;
00498
00515 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00516 UErrorCode& status) const;
00517
00526 virtual void applyPattern(const UnicodeString& pattern);
00527
00538 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00539 UErrorCode& status);
00540
00549 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00550
00557 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00558
00564 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00565
00577 static UClassID U_EXPORT2 getStaticClassID(void);
00578
00590 virtual UClassID getDynamicClassID(void) const;
00591
00601 virtual void adoptCalendar(Calendar* calendarToAdopt);
00602
00603 private:
00604 friend class DateFormat;
00605
00606 void initializeDefaultCentury(void);
00607
00608 SimpleDateFormat();
00609
00618 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00619
00628 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00629
00646 void subFormat( UnicodeString &appendTo,
00647 UChar ch,
00648 int32_t count,
00649 FieldPosition& pos,
00650 Calendar& cal,
00651 UErrorCode& status) const;
00652
00665 void zeroPaddingNumber( UnicodeString &appendTo,
00666 int32_t value,
00667 int32_t minDigits,
00668 int32_t maxDigits) const;
00669
00674 static UBool isNumeric(UChar formatChar, int32_t count);
00675
00683 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00684
00691 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00692
00702 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00703
00710 void initialize(const Locale& locale, UErrorCode& status);
00711
00724 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00725 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00726
00739 int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00740 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00741
00756 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00757 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal) const;
00758
00759 void parseInt(const UnicodeString& text,
00760 Formattable& number,
00761 ParsePosition& pos,
00762 UBool allowNegative) const;
00763
00764 void parseInt(const UnicodeString& text,
00765 Formattable& number,
00766 int32_t maxDigits,
00767 ParsePosition& pos,
00768 UBool allowNegative) const;
00769
00782 static void translatePattern(const UnicodeString& originalPattern,
00783 UnicodeString& translatedPattern,
00784 const UnicodeString& from,
00785 const UnicodeString& to,
00786 UErrorCode& status);
00787
00795 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00796
00800 void appendGMT(UnicodeString &appendTo, Calendar& cal, UErrorCode& status) const;
00801 void formatGMTDefault(UnicodeString &appendTo, int32_t offset) const;
00802 int32_t parseGMT(const UnicodeString &text, ParsePosition &pos) const;
00803 int32_t parseGMTDefault(const UnicodeString &text, ParsePosition &pos) const;
00804 UBool isDefaultGMTFormat() const;
00805
00806 void formatRFC822TZ(UnicodeString &appendTo, int32_t offset) const;
00807
00811 void initGMTFormatters(UErrorCode &status);
00812
00816 static const UCalendarDateFields fgPatternIndexToCalendarField[];
00817
00821 static const UDateFormatField fgPatternIndexToDateFormatField[];
00822
00826 UnicodeString fPattern;
00827
00831 Locale fLocale;
00832
00837 DateFormatSymbols* fSymbols;
00838
00847 UDate fDefaultCenturyStart;
00848
00852 int32_t fDefaultCenturyStartYear;
00853
00854 enum ParsedTZType {
00855 TZTYPE_UNK,
00856 TZTYPE_STD,
00857 TZTYPE_DST
00858 };
00859
00860 ParsedTZType tztype;
00861
00862
00863
00864
00865 MessageFormat **fGMTFormatters;
00866
00867 UBool fHaveDefaultCentury;
00868 };
00869
00870 inline UDate
00871 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00872 {
00873 return fDefaultCenturyStart;
00874 }
00875
00876 inline UnicodeString&
00877 SimpleDateFormat::format(const Formattable& obj,
00878 UnicodeString& appendTo,
00879 UErrorCode& status) const {
00880
00881
00882 return DateFormat::format(obj, appendTo, status);
00883 }
00884
00885 inline UnicodeString&
00886 SimpleDateFormat::format(UDate date,
00887 UnicodeString& appendTo,
00888 FieldPosition& fieldPosition) const {
00889
00890
00891 return DateFormat::format(date, appendTo, fieldPosition);
00892 }
00893
00894 inline UnicodeString&
00895 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00896 return DateFormat::format(date, appendTo);
00897 }
00898
00899 U_NAMESPACE_END
00900
00901 #endif
00902
00903 #endif // _SMPDTFMT
00904