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
00213 class U_I18N_API SimpleDateFormat: public DateFormat {
00214 public:
00224 SimpleDateFormat(UErrorCode& status);
00225
00237 SimpleDateFormat(const UnicodeString& pattern,
00238 UErrorCode& status);
00239
00252 SimpleDateFormat(const UnicodeString& pattern,
00253 const Locale& locale,
00254 UErrorCode& status);
00255
00265 SimpleDateFormat(const UnicodeString& pattern,
00266 DateFormatSymbols* formatDataToAdopt,
00267 UErrorCode& status);
00268
00278 SimpleDateFormat(const UnicodeString& pattern,
00279 const DateFormatSymbols& formatData,
00280 UErrorCode& status);
00281
00286 SimpleDateFormat(const SimpleDateFormat&);
00287
00292 SimpleDateFormat& operator=(const SimpleDateFormat&);
00293
00298 virtual ~SimpleDateFormat();
00299
00306 virtual Format* clone(void) const;
00307
00315 virtual UBool operator==(const Format& other) const;
00316
00333 virtual UnicodeString& format( Calendar& cal,
00334 UnicodeString& appendTo,
00335 FieldPosition& pos) const;
00336
00356 virtual UnicodeString& format( const Formattable& obj,
00357 UnicodeString& appendTo,
00358 FieldPosition& pos,
00359 UErrorCode& status) const;
00360
00371 UnicodeString& format(UDate date,
00372 UnicodeString& appendTo,
00373 FieldPosition& fieldPosition) const;
00374
00384 UnicodeString& format(const Formattable& obj,
00385 UnicodeString& appendTo,
00386 UErrorCode& status) const;
00387
00396 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00397
00417 virtual void parse( const UnicodeString& text,
00418 Calendar& cal,
00419 ParsePosition& pos) const;
00420
00440 UDate parse( const UnicodeString& text,
00441 ParsePosition& pos) const;
00442
00443
00459 virtual UDate parse( const UnicodeString& text,
00460 UErrorCode& status) const;
00461
00478 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00479
00495 UDate get2DigitYearStart(UErrorCode& status) const;
00496
00503 virtual UnicodeString& toPattern(UnicodeString& result) const;
00504
00521 virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00522 UErrorCode& status) const;
00523
00532 virtual void applyPattern(const UnicodeString& pattern);
00533
00544 virtual void applyLocalizedPattern(const UnicodeString& pattern,
00545 UErrorCode& status);
00546
00555 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00556
00563 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00564
00570 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00571
00583 static UClassID U_EXPORT2 getStaticClassID(void);
00584
00596 virtual UClassID getDynamicClassID(void) const;
00597
00607 virtual void adoptCalendar(Calendar* calendarToAdopt);
00608
00619 UBool isFieldUnitIgnored(UCalendarDateFields field) const;
00620
00621
00633 static UBool isFieldUnitIgnored(const UnicodeString& pattern,
00634 UCalendarDateFields field);
00635
00636
00637
00646 const Locale& getSmpFmtLocale(void) const;
00647
00648
00649 private:
00650 friend class DateFormat;
00651
00652 void initializeDefaultCentury(void);
00653
00654 SimpleDateFormat();
00655
00664 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00665
00674 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00675
00692 void subFormat( UnicodeString &appendTo,
00693 UChar ch,
00694 int32_t count,
00695 FieldPosition& pos,
00696 Calendar& cal,
00697 UErrorCode& status) const;
00698
00711 void zeroPaddingNumber( UnicodeString &appendTo,
00712 int32_t value,
00713 int32_t minDigits,
00714 int32_t maxDigits) const;
00715
00720 static UBool isNumeric(UChar formatChar, int32_t count);
00721
00729 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00730
00737 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00738
00748 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00749
00756 void initialize(const Locale& locale, UErrorCode& status);
00757
00770 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00771 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00772
00785 int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00786 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00787
00802 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00803 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal) const;
00804
00805 void parseInt(const UnicodeString& text,
00806 Formattable& number,
00807 ParsePosition& pos,
00808 UBool allowNegative) const;
00809
00810 void parseInt(const UnicodeString& text,
00811 Formattable& number,
00812 int32_t maxDigits,
00813 ParsePosition& pos,
00814 UBool allowNegative) const;
00815
00828 static void translatePattern(const UnicodeString& originalPattern,
00829 UnicodeString& translatedPattern,
00830 const UnicodeString& from,
00831 const UnicodeString& to,
00832 UErrorCode& status);
00833
00841 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00842
00846 void appendGMT(UnicodeString &appendTo, Calendar& cal, UErrorCode& status) const;
00847 void formatGMTDefault(UnicodeString &appendTo, int32_t offset) const;
00848 int32_t parseGMT(const UnicodeString &text, ParsePosition &pos) const;
00849 int32_t parseGMTDefault(const UnicodeString &text, ParsePosition &pos) const;
00850 UBool isDefaultGMTFormat() const;
00851
00852 void formatRFC822TZ(UnicodeString &appendTo, int32_t offset) const;
00853
00857 void initGMTFormatters(UErrorCode &status);
00858
00862 static const UCalendarDateFields fgPatternIndexToCalendarField[];
00863
00867 static const UDateFormatField fgPatternIndexToDateFormatField[];
00868
00875 static const int32_t fgCalendarFieldToLevel[];
00876 static const int32_t fgPatternCharToLevel[];
00877
00881 UnicodeString fPattern;
00882
00886 Locale fLocale;
00887
00892 DateFormatSymbols* fSymbols;
00893
00902 UDate fDefaultCenturyStart;
00903
00907 int32_t fDefaultCenturyStartYear;
00908
00909 enum ParsedTZType {
00910 TZTYPE_UNK,
00911 TZTYPE_STD,
00912 TZTYPE_DST
00913 };
00914
00915 ParsedTZType tztype;
00916
00917
00918
00919
00920 MessageFormat **fGMTFormatters;
00921
00922 UBool fHaveDefaultCentury;
00923 };
00924
00925 inline UDate
00926 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00927 {
00928 return fDefaultCenturyStart;
00929 }
00930
00931 inline UnicodeString&
00932 SimpleDateFormat::format(const Formattable& obj,
00933 UnicodeString& appendTo,
00934 UErrorCode& status) const {
00935
00936
00937 return DateFormat::format(obj, appendTo, status);
00938 }
00939
00940 inline UnicodeString&
00941 SimpleDateFormat::format(UDate date,
00942 UnicodeString& appendTo,
00943 FieldPosition& fieldPosition) const {
00944
00945
00946 return DateFormat::format(date, appendTo, fieldPosition);
00947 }
00948
00949 inline UnicodeString&
00950 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00951 return DateFormat::format(date, appendTo);
00952 }
00953
00954 U_NAMESPACE_END
00955
00956 #endif
00957
00958 #endif // _SMPDTFMT
00959