smpdtfmt.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) 1997-2012, International Business Machines Corporation and
00003 * others. All Rights Reserved.
00004 *******************************************************************************
00005 *
00006 * File SMPDTFMT.H
00007 *
00008 * Modification History:
00009 *
00010 *   Date        Name        Description
00011 *   02/19/97    aliu        Converted from java.
00012 *   07/09/97    helena      Make ParsePosition into a class.
00013 *   07/21/98    stephen     Added GMT_PLUS, GMT_MINUS
00014 *                            Changed setTwoDigitStartDate to set2DigitYearStart
00015 *                            Changed getTwoDigitStartDate to get2DigitYearStart
00016 *                            Removed subParseLong
00017 *                            Removed getZoneIndex (added in DateFormatSymbols)
00018 *   06/14/99    stephen     Removed fgTimeZoneDataSuffix
00019 *   10/14/99    aliu        Updated class doc to describe 2-digit year parsing
00020 *                           {j28 4182066}.
00021 *******************************************************************************
00022 */
00023 
00024 #ifndef SMPDTFMT_H
00025 #define SMPDTFMT_H
00026 
00027 #include "unicode/utypes.h"
00028 
00034 #if !UCONFIG_NO_FORMATTING
00035 
00036 #include "unicode/datefmt.h"
00037 #include "unicode/udisplaycontext.h"
00038 
00039 U_NAMESPACE_BEGIN
00040 
00041 class DateFormatSymbols;
00042 class DateFormat;
00043 class MessageFormat;
00044 class FieldPositionHandler;
00045 class TimeZoneFormat;
00046 
00227 class U_I18N_API SimpleDateFormat: public DateFormat {
00228 public:
00238     SimpleDateFormat(UErrorCode& status);
00239 
00251     SimpleDateFormat(const UnicodeString& pattern,
00252                      UErrorCode& status);
00253 
00275     SimpleDateFormat(const UnicodeString& pattern,
00276                      const UnicodeString& override,
00277                      UErrorCode& status);
00278 
00291     SimpleDateFormat(const UnicodeString& pattern,
00292                      const Locale& locale,
00293                      UErrorCode& status);
00294 
00316     SimpleDateFormat(const UnicodeString& pattern,
00317                      const UnicodeString& override,
00318                      const Locale& locale,
00319                      UErrorCode& status);
00320 
00330     SimpleDateFormat(const UnicodeString& pattern,
00331                      DateFormatSymbols* formatDataToAdopt,
00332                      UErrorCode& status);
00333 
00343     SimpleDateFormat(const UnicodeString& pattern,
00344                      const DateFormatSymbols& formatData,
00345                      UErrorCode& status);
00346 
00351     SimpleDateFormat(const SimpleDateFormat&);
00352 
00357     SimpleDateFormat& operator=(const SimpleDateFormat&);
00358 
00363     virtual ~SimpleDateFormat();
00364 
00371     virtual Format* clone(void) const;
00372 
00380     virtual UBool operator==(const Format& other) const;
00381 
00382 
00383     using DateFormat::format;
00384 
00401     virtual UnicodeString& format(  Calendar& cal,
00402                                     UnicodeString& appendTo,
00403                                     FieldPosition& pos) const;
00404 
00423     virtual UnicodeString& format(  Calendar& cal,
00424                                     UnicodeString& appendTo,
00425                                     FieldPositionIterator* posIter,
00426                                     UErrorCode& status) const;
00427 
00447     virtual UnicodeString& format(  const Formattable& obj,
00448                                     UnicodeString& appendTo,
00449                                     FieldPosition& pos,
00450                                     UErrorCode& status) const;
00451 
00472     virtual UnicodeString& format(  const Formattable& obj,
00473                                     UnicodeString& appendTo,
00474                                     FieldPositionIterator* posIter,
00475                                     UErrorCode& status) const;
00476 
00487     UnicodeString& format(UDate date,
00488                           UnicodeString& appendTo,
00489                           FieldPosition& fieldPosition) const;
00490 
00503     UnicodeString& format(UDate date,
00504                           UnicodeString& appendTo,
00505                           FieldPositionIterator* posIter,
00506                           UErrorCode& status) const;
00507 
00517     UnicodeString& format(const Formattable& obj,
00518                           UnicodeString& appendTo,
00519                           UErrorCode& status) const;
00520 
00529     UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00530 
00557     virtual void parse( const UnicodeString& text,
00558                         Calendar& cal,
00559                         ParsePosition& pos) const;
00560 
00591     UDate parse( const UnicodeString& text,
00592                  ParsePosition& pos) const;
00593 
00594 
00628     virtual UDate parse( const UnicodeString& text,
00629                         UErrorCode& status) const;
00630 
00647     virtual void set2DigitYearStart(UDate d, UErrorCode& status);
00648 
00664     UDate get2DigitYearStart(UErrorCode& status) const;
00665 
00672     virtual UnicodeString& toPattern(UnicodeString& result) const;
00673 
00690     virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
00691                                               UErrorCode& status) const;
00692 
00701     virtual void applyPattern(const UnicodeString& pattern);
00702 
00713     virtual void applyLocalizedPattern(const UnicodeString& pattern,
00714                                        UErrorCode& status);
00715 
00724     virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
00725 
00732     virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
00733 
00739     virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
00740 
00752     static UClassID U_EXPORT2 getStaticClassID(void);
00753 
00765     virtual UClassID getDynamicClassID(void) const;
00766 
00776     virtual void adoptCalendar(Calendar* calendarToAdopt);
00777 
00778     /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual */
00788     virtual void setContext(UDisplayContext value, UErrorCode& status);
00789 
00790     /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual */
00801     virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
00802 
00803     /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */
00811     virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt);
00812 
00818     virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat);
00819 
00825     virtual const TimeZoneFormat* getTimeZoneFormat(void) const;
00826 
00827 #ifndef U_HIDE_INTERNAL_API
00828 
00838     UBool isFieldUnitIgnored(UCalendarDateFields field) const;
00839 
00840 
00852     static UBool isFieldUnitIgnored(const UnicodeString& pattern,
00853                                     UCalendarDateFields field);
00854 
00863     const Locale& getSmpFmtLocale(void) const;
00864 #endif  /* U_HIDE_INTERNAL_API */
00865 
00866 private:
00867     friend class DateFormat;
00868 
00869     void initializeDefaultCentury(void);
00870 
00871     SimpleDateFormat(); // default constructor not implemented
00872 
00881     SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00882 
00891     SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
00892 
00896     UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const;
00897 
00914     void subFormat(UnicodeString &appendTo,
00915                    UChar ch,
00916                    int32_t count,
00917                    UDisplayContext capitalizationContext,
00918                    int32_t fieldNum,
00919                    FieldPositionHandler& handler,
00920                    Calendar& cal,
00921                    UErrorCode& status) const; // in case of illegal argument
00922 
00936     void zeroPaddingNumber(NumberFormat *currentNumberFormat,
00937                            UnicodeString &appendTo,
00938                            int32_t value,
00939                            int32_t minDigits,
00940                            int32_t maxDigits) const;
00941 
00946     static UBool isNumeric(UChar formatChar, int32_t count);
00947 
00951     static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset);
00952 
00956     static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset);
00957 
00965     Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
00966 
00973     void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
00974 
00984     void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
00985 
00992     void initialize(const Locale& locale, UErrorCode& status);
00993 
01007     int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
01008                         const UnicodeString* stringArray, int32_t stringArrayCount,
01009                         const UnicodeString* monthPattern, Calendar& cal) const;
01010 
01023     int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
01024                                const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
01025     
01039     static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
01040                                const UnicodeString &text, int32_t &textOffset, UBool lenient);
01041     
01060     int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
01061                      UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
01062                      int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const;
01063 
01064     void parseInt(const UnicodeString& text,
01065                   Formattable& number,
01066                   ParsePosition& pos,
01067                   UBool allowNegative,
01068                   NumberFormat *fmt) const;
01069 
01070     void parseInt(const UnicodeString& text,
01071                   Formattable& number,
01072                   int32_t maxDigits,
01073                   ParsePosition& pos,
01074                   UBool allowNegative,
01075                   NumberFormat *fmt) const;
01076 
01077     int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
01078                            int32_t patLoc, UBool isNegative) const;
01079 
01092     static void translatePattern(const UnicodeString& originalPattern,
01093                                 UnicodeString& translatedPattern,
01094                                 const UnicodeString& from,
01095                                 const UnicodeString& to,
01096                                 UErrorCode& status);
01097 
01105     void         parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
01106 
01116     int32_t compareSimpleAffix(const UnicodeString& affix,
01117                    const UnicodeString& input,
01118                    int32_t pos) const;
01119 
01124     int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const;
01125 
01130     int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
01131 
01135     void initNumberFormatters(const Locale &locale,UErrorCode &status);
01136 
01140      NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
01141 
01145     void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
01146 
01150     static const UCalendarDateFields fgPatternIndexToCalendarField[];
01151 
01155     static const UDateFormatField fgPatternIndexToDateFormatField[];
01156 
01160     TimeZoneFormat *tzFormat() const;
01161 
01168     static const int32_t fgCalendarFieldToLevel[];
01169     static const int32_t fgPatternCharToLevel[];
01170 
01174     UnicodeString       fPattern;
01175 
01179     UnicodeString       fDateOverride;
01180 
01184     UnicodeString       fTimeOverride;
01185 
01186 
01190     Locale              fLocale;
01191 
01196     DateFormatSymbols*  fSymbols;   // Owned
01197 
01201     TimeZoneFormat* fTimeZoneFormat;
01202 
01211     UDate                fDefaultCenturyStart;
01212 
01216     /*transient*/ int32_t   fDefaultCenturyStartYear;
01217 
01218     int32_t tztype; // here to avoid api change
01219 
01220     typedef struct NSOverride {
01221         NumberFormat *nf;
01222         int32_t hash;
01223         NSOverride *next;
01224     } NSOverride;
01225 
01226     NumberFormat    **fNumberFormatters;
01227 
01228     NSOverride      *fOverrideList;
01229 
01230     UBool fHaveDefaultCentury;
01231 
01232     UDisplayContext fCapitalizationContext;
01233 };
01234 
01235 inline UDate
01236 SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const
01237 {
01238     return fDefaultCenturyStart;
01239 }
01240 
01241 inline UnicodeString&
01242 SimpleDateFormat::format(const Formattable& obj,
01243                          UnicodeString& appendTo,
01244                          UErrorCode& status) const {
01245     // Don't use Format:: - use immediate base class only,
01246     // in case immediate base modifies behavior later.
01247     return DateFormat::format(obj, appendTo, status);
01248 }
01249 
01250 inline UnicodeString&
01251 SimpleDateFormat::format(const Formattable& obj,
01252                          UnicodeString& appendTo,
01253                          FieldPosition& pos,
01254                          UErrorCode& status) const
01255 {
01256     // Don't use Format:: - use immediate base class only,
01257     // in case immediate base modifies behavior later.
01258     return DateFormat::format(obj, appendTo, pos, status);
01259 }
01260 
01261 inline UnicodeString&
01262 SimpleDateFormat::format(const Formattable& obj,
01263                          UnicodeString& appendTo,
01264                          FieldPositionIterator* posIter,
01265                          UErrorCode& status) const
01266 {
01267     // Don't use Format:: - use immediate base class only,
01268     // in case immediate base modifies behavior later.
01269     return DateFormat::format(obj, appendTo, posIter, status);
01270 }
01271 
01272 inline UnicodeString&
01273 SimpleDateFormat::format(UDate date,
01274                          UnicodeString& appendTo,
01275                          FieldPosition& fieldPosition) const {
01276     // Don't use Format:: - use immediate base class only,
01277     // in case immediate base modifies behavior later.
01278     return DateFormat::format(date, appendTo, fieldPosition);
01279 }
01280 
01281 inline UnicodeString&
01282 SimpleDateFormat::format(UDate date,
01283                          UnicodeString& appendTo,
01284                          FieldPositionIterator* posIter,
01285                          UErrorCode& status) const {
01286     // Don't use Format:: - use immediate base class only,
01287     // in case immediate base modifies behavior later.
01288     return DateFormat::format(date, appendTo, posIter, status);
01289 }
01290 
01291 inline UnicodeString&
01292 SimpleDateFormat::format(UDate date, UnicodeString& appendTo) const {
01293     return DateFormat::format(date, appendTo);
01294 }
01295 
01296 U_NAMESPACE_END
01297 
01298 #endif /* #if !UCONFIG_NO_FORMATTING */
01299 
01300 #endif // _SMPDTFMT
01301 //eof

Generated on 25 Nov 2014 for ICU 50.1.2 by  doxygen 1.4.7