00001 /* 00002 * Copyright © {1997-1999}, 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 #include "unicode/datefmt.h" 00028 class DateFormatSymbols; 00029 class DateFormat; 00030 00166 class U_I18N_API SimpleDateFormat: public DateFormat { 00167 public: 00176 SimpleDateFormat(UErrorCode& status); 00177 00187 SimpleDateFormat(const UnicodeString& pattern, 00188 UErrorCode& status); 00189 00199 SimpleDateFormat(const UnicodeString& pattern, 00200 const Locale& locale, 00201 UErrorCode& status); 00202 00209 SimpleDateFormat(const UnicodeString& pattern, 00210 DateFormatSymbols* formatDataToAdopt, 00211 UErrorCode& status); 00212 00219 SimpleDateFormat(const UnicodeString& pattern, 00220 const DateFormatSymbols& formatData, 00221 UErrorCode& status); 00222 00227 SimpleDateFormat(const SimpleDateFormat&); 00228 00233 SimpleDateFormat& operator=(const SimpleDateFormat&); 00234 00239 virtual ~SimpleDateFormat(); 00240 00246 virtual Format* clone(void) const; 00247 00253 virtual UBool operator==(const Format& other) const; 00254 00270 virtual UnicodeString& format( UDate date, 00271 UnicodeString& toAppendTo, 00272 FieldPosition& pos) const; 00273 00292 virtual UnicodeString& format( const Formattable& obj, 00293 UnicodeString& toAppendTo, 00294 FieldPosition& pos, 00295 UErrorCode& status) const; 00296 00301 UnicodeString& format(const Formattable& obj, 00302 UnicodeString& result, 00303 UErrorCode& status) const; 00304 00309 UnicodeString& format(UDate date, UnicodeString& result) const; 00310 00330 virtual UDate parse( const UnicodeString& text, 00331 ParsePosition& pos) const; 00332 00333 00349 virtual UDate parse( const UnicodeString& text, 00350 UErrorCode& status) const; 00351 00365 virtual void set2DigitYearStart(UDate d, UErrorCode& status); 00366 00380 UDate get2DigitYearStart(UErrorCode& status) const; 00381 00386 virtual UnicodeString& toPattern(UnicodeString& result) const; 00387 00403 virtual UnicodeString& toLocalizedPattern(UnicodeString& result, 00404 UErrorCode& status) const; 00405 00414 virtual void applyPattern(const UnicodeString& pattern); 00415 00426 virtual void applyLocalizedPattern(const UnicodeString& pattern, 00427 UErrorCode& status); 00428 00437 virtual const DateFormatSymbols* getDateFormatSymbols(void) const; 00438 00445 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols); 00446 00452 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols); 00453 00454 00455 public: 00459 static const char *fgErasTag; // resource bundle tag for era names 00460 static const char *fgMonthNamesTag; // resource bundle tag for month names 00461 static const char *fgMonthAbbreviationsTag; // resource bundle tag for month abbreviations 00462 static const char *fgDayNamesTag; // resource bundle tag for day names 00463 static const char *fgDayAbbreviationsTag; // resource bundle tag for day abbreviations 00464 static const char *fgAmPmMarkersTag; // resource bundle tag for AM/PM strings 00465 static const char *fgDateTimePatternsTag; // resource bundle tag for default date and time patterns 00466 00467 static const char *fgZoneStringsTag; // resource bundle tag for time zone names 00468 static const char *fgLocalPatternCharsTag; // resource bundle tag for localized pattern characters 00469 00470 static const UnicodeString fgDefaultPattern; // date/time pattern of last resort 00471 00472 public: 00484 static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } 00485 00497 virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); } 00498 00499 private: 00500 static char fgClassID; 00501 00502 friend class DateFormat; 00503 00516 //int32_t getZoneIndex(const DateFormatSymbols&, const UnicodeString& ID) const; 00517 00518 void initializeDefaultCentury(void); 00519 00523 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 00524 00530 SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern 00531 00552 UnicodeString& subFormat( UnicodeString& result, 00553 UChar ch, 00554 int32_t count, 00555 int32_t beginOffset, 00556 FieldPosition& pos, 00557 UErrorCode& status) const; // in case of illegal argument 00558 00569 UnicodeString& zeroPaddingNumber(UnicodeString& result, 00570 int32_t value, 00571 int32_t minDigits, 00572 int32_t maxDigits) const; 00573 00583 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 00584 00591 void initialize(const Locale& locale, UErrorCode& status); 00592 00602 int32_t matchString(const UnicodeString& text, UTextOffset start, Calendar::EDateFields field, 00603 const UnicodeString* stringArray, int32_t stringArrayCount) const; 00604 00617 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count, 00618 UBool obeyCount, UBool ambiguousYear[]) const; 00619 00627 //UBool subParseLong(const UnicodeString& text, ParsePosition& pos, int32_t& value) const; 00628 00635 static void translatePattern(const UnicodeString& originalPattern, 00636 UnicodeString& translatedPattern, 00637 const UnicodeString& from, 00638 const UnicodeString& to, 00639 UErrorCode& status); 00644 //int32_t getZoneIndex(const UnicodeString& ID) const; 00645 00650 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); 00651 00656 UDate internalGetDefaultCenturyStart(void) const; 00657 00662 int32_t internalGetDefaultCenturyStartYear(void) const; 00663 00668 static void initializeSystemDefaultCentury(void); 00669 00673 // For time zones that have no names, use strings GMT+minutes and 00674 // GMT-minutes. For instance, in France the time zone is GMT+60. 00675 static const UnicodeString fgGmtPlus; 00676 static const UnicodeString fgGmtMinus; 00677 static const UnicodeString fgGmt; 00678 00682 static const Calendar::EDateFields fgPatternIndexToCalendarField[]; 00683 00687 static const DateFormat::EField fgPatternIndexToDateFormatField[]; 00688 00692 UnicodeString fPattern; 00693 00698 DateFormatSymbols* fSymbols; // Owned 00699 00708 UDate fDefaultCenturyStart; 00709 00713 /*transient*/ int32_t fDefaultCenturyStartYear; 00714 00721 static UDate fgSystemDefaultCenturyStart; 00722 00726 static int32_t fgSystemDefaultCenturyStartYear; 00727 00731 static const int32_t fgSystemDefaultCenturyYear; 00732 00733 public: 00738 static const UDate fgSystemDefaultCentury; 00739 }; 00740 00741 inline UDate 00742 SimpleDateFormat::get2DigitYearStart(UErrorCode& status) const 00743 { 00744 return fDefaultCenturyStart; 00745 } 00746 00747 inline UnicodeString& 00748 SimpleDateFormat::format(const Formattable& obj, 00749 UnicodeString& result, 00750 UErrorCode& status) const { 00751 // Don't use Format:: - use immediate base class only, 00752 // in case immediate base modifies behavior later. 00753 return DateFormat::format(obj, result, status); 00754 } 00755 00756 inline UnicodeString& 00757 SimpleDateFormat::format(UDate date, UnicodeString& result) const { 00758 return DateFormat::format(date, result); 00759 } 00760 00761 #endif // _SMPDTFMT 00762 //eof