smpdtfmt.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) 1997-2008, International Business Machines Corporation and others. All Rights Reserved.
00003 *******************************************************************************
00004 *
00005 * File SMPDTFMT.H
00006 *
00007 * Modification History:
00008 *
00009 *   Date        Name        Description
00010 *   02/19/97    aliu        Converted from java.
00011 *   07/09/97    helena      Make ParsePosition into a class.
00012 *   07/21/98    stephen     Added GMT_PLUS, GMT_MINUS
00013 *                            Changed setTwoDigitStartDate to set2DigitYearStart
00014 *                            Changed getTwoDigitStartDate to get2DigitYearStart
00015 *                            Removed subParseLong
00016 *                            Removed getZoneIndex (added in DateFormatSymbols)
00017 *   06/14/99    stephen     Removed fgTimeZoneDataSuffix
00018 *   10/14/99    aliu        Updated class doc to describe 2-digit year parsing
00019 *                           {j28 4182066}.
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(); // default constructor not implemented
00655 
00664     SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00665 
00674     SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
00675 
00692     void subFormat(             UnicodeString &appendTo,
00693                                 UChar ch,
00694                                 int32_t count,
00695                                 FieldPosition& pos,
00696                                 Calendar& cal,
00697                                 UErrorCode& status) const; // in case of illegal argument
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;   // Owned
00893 
00902     UDate                fDefaultCenturyStart;
00903 
00907     /*transient*/ int32_t   fDefaultCenturyStartYear;
00908 
00909     enum ParsedTZType {
00910         TZTYPE_UNK,
00911         TZTYPE_STD,
00912         TZTYPE_DST
00913     };
00914 
00915     ParsedTZType tztype; // here to avoid api change
00916 
00917     /*
00918      * MessageFormat instances used for localized GMT format
00919      */
00920     MessageFormat   **fGMTFormatters;
00921 
00922     UBool fHaveDefaultCentury;
00923 };
00924 
00925 inline UDate
00926 SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const
00927 {
00928     return fDefaultCenturyStart;
00929 }
00930 
00931 inline UnicodeString&
00932 SimpleDateFormat::format(const Formattable& obj,
00933                          UnicodeString& appendTo,
00934                          UErrorCode& status) const {
00935     // Don't use Format:: - use immediate base class only,
00936     // in case immediate base modifies behavior later.
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     // Don't use Format:: - use immediate base class only,
00945     // in case immediate base modifies behavior later.
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 /* #if !UCONFIG_NO_FORMATTING */
00957 
00958 #endif // _SMPDTFMT
00959 //eof

Generated on Sun Aug 22 15:43:58 2010 for ICU 4.0.1 by  doxygen 1.3.9.1