/* * Copyright © {1997-1999}, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************* * * File SMPDTFMT.H * * Modification History: * * Date Name Description * 02/19/97 aliu Converted from java. * 07/09/97 helena Make ParsePosition into a class. * 07/21/98 stephen Added GMT_PLUS, GMT_MINUS * Changed setTwoDigitStartDate to set2DigitYearStart * Changed getTwoDigitStartDate to get2DigitYearStart * Removed subParseLong * Removed getZoneIndex (added in DateFormatSymbols) * 06/14/99 stephen Removed fgTimeZoneDataSuffix * 10/14/99 aliu Updated class doc to describe 2-digit year parsing * {j28 4182066}. ******************************************************************************* */ #ifndef SMPDTFMT_H #define SMPDTFMT_H #include "unicode/utypes.h" #include "unicode/datefmt.h" class DateFormatSymbols; class DateFormat; class U_I18N_API SimpleDateFormat: public DateFormat { public: SimpleDateFormat(UErrorCode& status); SimpleDateFormat(const UnicodeString& pattern, UErrorCode& status); SimpleDateFormat(const UnicodeString& pattern, const Locale& locale, UErrorCode& status); SimpleDateFormat(const UnicodeString& pattern, DateFormatSymbols* formatDataToAdopt, UErrorCode& status); SimpleDateFormat(const UnicodeString& pattern, const DateFormatSymbols& formatData, UErrorCode& status); SimpleDateFormat(const SimpleDateFormat&); SimpleDateFormat& operator=(const SimpleDateFormat&); virtual ~SimpleDateFormat(); virtual Format* clone(void) const; virtual bool_t operator==(const Format& other) const; virtual UnicodeString& format( UDate date, UnicodeString& toAppendTo, FieldPosition& pos) const; virtual UnicodeString& format( const Formattable& obj, UnicodeString& toAppendTo, FieldPosition& pos, UErrorCode& status) const; UnicodeString& format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const; UnicodeString& format(UDate date, UnicodeString& result) const; virtual UDate parse( const UnicodeString& text, ParsePosition& pos) const; virtual UDate parse( const UnicodeString& text, UErrorCode& status) const; virtual void set2DigitYearStart(UDate d, UErrorCode& status); UDate get2DigitYearStart(UErrorCode& status) const; virtual UnicodeString& toPattern(UnicodeString& result) const; virtual UnicodeString& toLocalizedPattern(UnicodeString& result, UErrorCode& status) const; virtual void applyPattern(const UnicodeString& pattern); virtual void applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status); virtual const DateFormatSymbols* getDateFormatSymbols(void) const; virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols); virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols); public: static const char *fgErasTag; // resource bundle tag for era names static const char *fgMonthNamesTag; // resource bundle tag for month names static const char *fgMonthAbbreviationsTag; // resource bundle tag for month abbreviations static const char *fgDayNamesTag; // resource bundle tag for day names static const char *fgDayAbbreviationsTag; // resource bundle tag for day abbreviations static const char *fgAmPmMarkersTag; // resource bundle tag for AM/PM strings static const char *fgDateTimePatternsTag; // resource bundle tag for default date and time patterns static const char *fgZoneStringsTag; // resource bundle tag for time zone names static const char *fgLocalPatternCharsTag; // resource bundle tag for localized pattern characters static const UnicodeString fgDefaultPattern; // date/time pattern of last resort public: static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } private: static char fgClassID; friend class DateFormat; //int32_t getZoneIndex(const DateFormatSymbols&, const UnicodeString& ID) const; void initializeDefaultCentury(void); SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern UnicodeString& subFormat( UnicodeString& result, UChar ch, int32_t count, int32_t beginOffset, FieldPosition& pos, UErrorCode& status) const; // in case of illegal argument UnicodeString& zeroPaddingNumber(UnicodeString& result, int32_t value, int32_t minDigits, int32_t maxDigits) const; void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); void initialize(const Locale& locale, UErrorCode& status); int32_t matchString(const UnicodeString& text, UTextOffset start, Calendar::EDateFields field, const UnicodeString* stringArray, int32_t stringArrayCount) const; int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count, bool_t obeyCount, bool_t ambiguousYear[]) const; //bool_t subParseLong(const UnicodeString& text, ParsePosition& pos, int32_t& value) const; static void translatePattern(const UnicodeString& originalPattern, UnicodeString& translatedPattern, const UnicodeString& from, const UnicodeString& to, UErrorCode& status); //int32_t getZoneIndex(const UnicodeString& ID) const; void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); UDate internalGetDefaultCenturyStart(void) const; int32_t internalGetDefaultCenturyStartYear(void) const; static void initializeSystemDefaultCentury(void); // For time zones that have no names, use strings GMT+minutes and // GMT-minutes. For instance, in France the time zone is GMT+60. static const UnicodeString fgGmtPlus; static const UnicodeString fgGmtMinus; static const UnicodeString fgGmt; static const Calendar::EDateFields fgPatternIndexToCalendarField[]; static const DateFormat::EField fgPatternIndexToDateFormatField[]; UnicodeString fPattern; DateFormatSymbols* fSymbols; // Owned UDate fDefaultCenturyStart; /*transient*/ int32_t fDefaultCenturyStartYear; static UDate fgSystemDefaultCenturyStart; static int32_t fgSystemDefaultCenturyStartYear; static const int32_t fgSystemDefaultCenturyYear; public: static const UDate fgSystemDefaultCentury; }; inline UDate SimpleDateFormat::get2DigitYearStart(UErrorCode& status) const { return fDefaultCenturyStart; } inline UnicodeString& SimpleDateFormat::format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const { // Don't use Format:: - use immediate base class only, // in case immediate base modifies behavior later. return DateFormat::format(obj, result, status); } inline UnicodeString& SimpleDateFormat::format(UDate date, UnicodeString& result) const { return DateFormat::format(date, result); } #endif // _SMPDTFMT //eof