ICU 49.1.1
49.1.1
|
00001 /* 00002 ******************************************************************************** 00003 * Copyright (C) 1997-2012, International Business Machines 00004 * Corporation and others. All Rights Reserved. 00005 ******************************************************************************** 00006 * 00007 * File DATEFMT.H 00008 * 00009 * Modification History: 00010 * 00011 * Date Name Description 00012 * 02/19/97 aliu Converted from java. 00013 * 04/01/97 aliu Added support for centuries. 00014 * 07/23/98 stephen JDK 1.2 sync 00015 * 11/15/99 weiv Added support for week of year/day of week formatting 00016 ******************************************************************************** 00017 */ 00018 00019 #ifndef DATEFMT_H 00020 #define DATEFMT_H 00021 00022 #include "unicode/utypes.h" 00023 00024 #if !UCONFIG_NO_FORMATTING 00025 00026 #include "unicode/udat.h" 00027 #include "unicode/calendar.h" 00028 #include "unicode/numfmt.h" 00029 #include "unicode/format.h" 00030 #include "unicode/locid.h" 00031 00037 U_NAMESPACE_BEGIN 00038 00039 class TimeZone; 00040 class DateTimePatternGenerator; 00041 00138 class U_I18N_API DateFormat : public Format { 00139 public: 00140 00148 enum EStyle 00149 { 00150 kNone = -1, 00151 00152 kFull = 0, 00153 kLong = 1, 00154 kMedium = 2, 00155 kShort = 3, 00156 00157 kDateOffset = kShort + 1, 00158 // kFull + kDateOffset = 4 00159 // kLong + kDateOffset = 5 00160 // kMedium + kDateOffset = 6 00161 // kShort + kDateOffset = 7 00162 00163 kDateTime = 8, 00164 // Default DateTime 00165 00166 kDateTimeOffset = kDateTime + 1, 00167 // kFull + kDateTimeOffset = 9 00168 // kLong + kDateTimeOffset = 10 00169 // kMedium + kDateTimeOffset = 11 00170 // kShort + kDateTimeOffset = 12 00171 00172 // relative dates 00173 kRelative = (1 << 7), 00174 00175 kFullRelative = (kFull | kRelative), 00176 00177 kLongRelative = kLong | kRelative, 00178 00179 kMediumRelative = kMedium | kRelative, 00180 00181 kShortRelative = kShort | kRelative, 00182 00183 00184 kDefault = kMedium, 00185 00186 00187 00192 FULL = kFull, 00193 LONG = kLong, 00194 MEDIUM = kMedium, 00195 SHORT = kShort, 00196 DEFAULT = kDefault, 00197 DATE_OFFSET = kDateOffset, 00198 NONE = kNone, 00199 DATE_TIME = kDateTime 00200 }; 00201 00206 virtual ~DateFormat(); 00207 00212 virtual UBool operator==(const Format&) const; 00213 00214 00215 using Format::format; 00216 00231 virtual UnicodeString& format(const Formattable& obj, 00232 UnicodeString& appendTo, 00233 FieldPosition& pos, 00234 UErrorCode& status) const; 00235 00251 virtual UnicodeString& format(const Formattable& obj, 00252 UnicodeString& appendTo, 00253 FieldPositionIterator* posIter, 00254 UErrorCode& status) const; 00288 virtual UnicodeString& format( Calendar& cal, 00289 UnicodeString& appendTo, 00290 FieldPosition& fieldPosition) const = 0; 00291 00310 virtual UnicodeString& format(Calendar& cal, 00311 UnicodeString& appendTo, 00312 FieldPositionIterator* posIter, 00313 UErrorCode& status) const; 00341 UnicodeString& format( UDate date, 00342 UnicodeString& appendTo, 00343 FieldPosition& fieldPosition) const; 00344 00358 UnicodeString& format(UDate date, 00359 UnicodeString& appendTo, 00360 FieldPositionIterator* posIter, 00361 UErrorCode& status) const; 00373 UnicodeString& format(UDate date, UnicodeString& appendTo) const; 00374 00385 UnicodeString& format(const Formattable& obj, 00386 UnicodeString& appendTo, 00387 UErrorCode& status) const; 00388 00423 virtual UDate parse( const UnicodeString& text, 00424 UErrorCode& status) const; 00425 00452 virtual void parse( const UnicodeString& text, 00453 Calendar& cal, 00454 ParsePosition& pos) const = 0; 00455 00486 UDate parse( const UnicodeString& text, 00487 ParsePosition& pos) const; 00488 00515 virtual void parseObject(const UnicodeString& source, 00516 Formattable& result, 00517 ParsePosition& parse_pos) const; 00518 00526 static DateFormat* U_EXPORT2 createInstance(void); 00527 00539 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault, 00540 const Locale& aLocale = Locale::getDefault()); 00541 00557 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault, 00558 const Locale& aLocale = Locale::getDefault()); 00559 00578 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault, 00579 EStyle timeStyle = kDefault, 00580 const Locale& aLocale = Locale::getDefault()); 00581 00589 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count); 00590 00595 virtual UBool isLenient(void) const; 00596 00607 virtual void setLenient(UBool lenient); 00608 00614 virtual const Calendar* getCalendar(void) const; 00615 00625 virtual void adoptCalendar(Calendar* calendarToAdopt); 00626 00634 virtual void setCalendar(const Calendar& newCalendar); 00635 00636 00643 virtual const NumberFormat* getNumberFormat(void) const; 00644 00651 virtual void adoptNumberFormat(NumberFormat* formatToAdopt); 00652 00658 virtual void setNumberFormat(const NumberFormat& newNumberFormat); 00659 00665 virtual const TimeZone& getTimeZone(void) const; 00666 00673 virtual void adoptTimeZone(TimeZone* zoneToAdopt); 00674 00680 virtual void setTimeZone(const TimeZone& zone); 00681 00682 protected: 00689 DateFormat(); 00690 00695 DateFormat(const DateFormat&); 00696 00701 DateFormat& operator=(const DateFormat&); 00702 00709 Calendar* fCalendar; 00710 00717 NumberFormat* fNumberFormat; 00718 00719 private: 00728 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale); 00729 00730 public: 00731 #ifndef U_HIDE_OBSOLETE_API 00732 00737 enum EField 00738 { 00739 // Obsolete; use UDateFormatField instead 00740 kEraField = UDAT_ERA_FIELD, 00741 kYearField = UDAT_YEAR_FIELD, 00742 kMonthField = UDAT_MONTH_FIELD, 00743 kDateField = UDAT_DATE_FIELD, 00744 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD, 00745 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD, 00746 kMinuteField = UDAT_MINUTE_FIELD, 00747 kSecondField = UDAT_SECOND_FIELD, 00748 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD, 00749 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD, 00750 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD, 00751 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD, 00752 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD, 00753 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD, 00754 kAmPmField = UDAT_AM_PM_FIELD, 00755 kHour1Field = UDAT_HOUR1_FIELD, 00756 kHour0Field = UDAT_HOUR0_FIELD, 00757 kTimezoneField = UDAT_TIMEZONE_FIELD, 00758 kYearWOYField = UDAT_YEAR_WOY_FIELD, 00759 kDOWLocalField = UDAT_DOW_LOCAL_FIELD, 00760 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD, 00761 kJulianDayField = UDAT_JULIAN_DAY_FIELD, 00762 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD, 00763 00764 // Obsolete; use UDateFormatField instead 00765 ERA_FIELD = UDAT_ERA_FIELD, 00766 YEAR_FIELD = UDAT_YEAR_FIELD, 00767 MONTH_FIELD = UDAT_MONTH_FIELD, 00768 DATE_FIELD = UDAT_DATE_FIELD, 00769 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD, 00770 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD, 00771 MINUTE_FIELD = UDAT_MINUTE_FIELD, 00772 SECOND_FIELD = UDAT_SECOND_FIELD, 00773 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD, 00774 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD, 00775 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD, 00776 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD, 00777 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD, 00778 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD, 00779 AM_PM_FIELD = UDAT_AM_PM_FIELD, 00780 HOUR1_FIELD = UDAT_HOUR1_FIELD, 00781 HOUR0_FIELD = UDAT_HOUR0_FIELD, 00782 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD 00783 }; 00784 #endif /* U_HIDE_OBSOLETE_API */ 00785 }; 00786 00787 inline UnicodeString& 00788 DateFormat::format(const Formattable& obj, 00789 UnicodeString& appendTo, 00790 UErrorCode& status) const { 00791 return Format::format(obj, appendTo, status); 00792 } 00793 U_NAMESPACE_END 00794 00795 #endif /* #if !UCONFIG_NO_FORMATTING */ 00796 00797 #endif // _DATEFMT 00798 //eof