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 inline UClassID getStaticClassID(void);
00561
00573 virtual UClassID getDynamicClassID(void) const;
00574
00584 virtual void adoptCalendar(Calendar* calendarToAdopt);
00585
00586 private:
00587 static const char fgClassID;
00588
00589 static const char fgDateTimePatternsTag[];
00590
00591 static const UChar fgDefaultPattern[];
00592
00593 friend class DateFormat;
00594
00595 void initializeDefaultCentury(void);
00596
00597 SimpleDateFormat();
00598
00607 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00608
00617 SimpleDateFormat(const Locale& locale, UErrorCode& status);
00618
00635 void subFormat( UnicodeString &appendTo,
00636 UChar ch,
00637 int32_t count,
00638 FieldPosition& pos,
00639 Calendar& cal,
00640 UErrorCode& status) const;
00641
00654 void zeroPaddingNumber( UnicodeString &appendTo,
00655 int32_t value,
00656 int32_t minDigits,
00657 int32_t maxDigits) const;
00658
00663 static UBool isNumeric(UChar formatChar, int32_t count);
00664
00672 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00673
00680 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00681
00691 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00692
00699 void initialize(const Locale& locale, UErrorCode& status);
00700
00713 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
00714 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
00715
00730 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
00731 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal) const;
00732
00733 void parseInt(const UnicodeString& text,
00734 Formattable& number,
00735 ParsePosition& pos,
00736 UBool allowNegative) const;
00737
00750 static void translatePattern(const UnicodeString& originalPattern,
00751 UnicodeString& translatedPattern,
00752 const UnicodeString& from,
00753 const UnicodeString& to,
00754 UErrorCode& status);
00755
00763 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
00764
00765
00769
00770
00771 static const UChar fgGmtPlus[];
00772 static const UChar fgGmtMinus[];
00773 static const UChar fgGmt[];
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 public:
00825 static const UDate fgSystemDefaultCentury;
00826
00827 };
00828
00829 inline UClassID
00830 SimpleDateFormat::getStaticClassID(void)
00831 { return (UClassID)&fgClassID; }
00832
00833 inline UClassID
00834 SimpleDateFormat::getDynamicClassID(void) const
00835 { return SimpleDateFormat::getStaticClassID(); }
00836
00837 inline UDate
00838 SimpleDateFormat::get2DigitYearStart(UErrorCode& ) const
00839 {
00840 return fDefaultCenturyStart;
00841 }
00842
00843 inline UnicodeString&
00844 SimpleDateFormat::format(const Formattable& obj,
00845 UnicodeString& appendTo,
00846 UErrorCode& status) const {
00847
00848
00849 return DateFormat::format(obj, appendTo, status);
00850 }
00851
00852 inline UnicodeString&
00853 SimpleDateFormat::format(UDate date,
00854 UnicodeString& appendTo,
00855 FieldPosition& fieldPosition) const {
00856
00857
00858 return DateFormat::format(date, appendTo, fieldPosition);
00859 }
00860
00861 inline UnicodeString&
00862 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
00863 return DateFormat::format(date, appendTo);
00864 }
00865
00866 U_NAMESPACE_END
00867
00868 #endif
00869
00870 #endif // _SMPDTFMT
00871