00001 /* 00002 ******************************************************************************** 00003 * Copyright (C) 1997-1999, 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 #include "unicode/calendar.h" 00024 #include "unicode/numfmt.h" 00025 #include "unicode/format.h" 00026 #include "unicode/locid.h" 00027 class TimeZone; 00028 00100 class U_I18N_API DateFormat : public Format { 00101 public: 00112 enum EField 00113 { 00114 kEraField, // ERA field alignment. 00115 kYearField, // YEAR field alignment. 00116 kMonthField, // MONTH field alignment. 00117 kDateField, // DATE field alignment. 00118 kHourOfDay1Field, // One-based HOUR_OF_DAY field alignment. 00119 // kHourOfDay1Field is used for the one-based 24-hour clock. 00120 // For example, 23:59 + 01:00 results in 24:59. 00121 kHourOfDay0Field, // Zero-based HOUR_OF_DAY field alignment. 00122 // HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock. 00123 // For example, 23:59 + 01:00 results in 00:59. 00124 kMinuteField, // MINUTE field alignment. 00125 kSecondField, // SECOND field alignment. 00126 kMillisecondField, // MILLISECOND field alignment. 00127 kDayOfWeekField, // DAY_OF_WEEK field alignment. 00128 kDayOfYearField, // DAY_OF_YEAR field alignment. 00129 kDayOfWeekInMonthField,// DAY_OF_WEEK_IN_MONTH field alignment. 00130 kWeekOfYearField, // WEEK_OF_YEAR field alignment. 00131 kWeekOfMonthField, // WEEK_OF_MONTH field alignment. 00132 kAmPmField, // AM_PM field alignment. 00133 kHour1Field, // One-based HOUR field alignment. 00134 // HOUR1_FIELD is used for the one-based 12-hour clock. 00135 // For example, 11:30 PM + 1 hour results in 12:30 AM. 00136 kHour0Field, // Zero-based HOUR field alignment. 00137 // HOUR0_FIELD is used for the zero-based 12-hour clock. 00138 // For example, 11:30 PM + 1 hour results in 00:30 AM. 00139 kTimezoneField, // TIMEZONE field alignment. 00140 kYearWOYField, // Corrected year for week representation 00141 kDOWLocalField, // localized day of week 00142 00143 00144 00149 ERA_FIELD = kEraField, 00150 YEAR_FIELD = kYearField, 00151 MONTH_FIELD = kMonthField, 00152 DATE_FIELD = kDateField, 00153 HOUR_OF_DAY1_FIELD = kHourOfDay1Field, 00154 HOUR_OF_DAY0_FIELD = kHourOfDay0Field, 00155 MINUTE_FIELD = kMinuteField, 00156 SECOND_FIELD = kSecondField, 00157 MILLISECOND_FIELD = kMillisecondField, 00158 DAY_OF_WEEK_FIELD = kDayOfWeekField, 00159 DAY_OF_YEAR_FIELD = kDayOfYearField, 00160 DAY_OF_WEEK_IN_MONTH_FIELD = kDayOfWeekInMonthField, 00161 WEEK_OF_YEAR_FIELD = kWeekOfYearField, 00162 WEEK_OF_MONTH_FIELD = kWeekOfMonthField, 00163 AM_PM_FIELD = kAmPmField, 00164 HOUR1_FIELD = kHour1Field, 00165 HOUR0_FIELD = kHour0Field, 00166 TIMEZONE_FIELD = kTimezoneField 00167 00168 }; 00169 00176 enum EStyle 00177 { 00178 kFull, 00179 kLong, 00180 kMedium, 00181 kShort, 00182 00183 kDefault = kMedium, 00184 kDateOffset = 4, 00185 kNone = -1, 00186 kDateTime = 8, 00187 00188 00193 FULL = kFull, 00194 LONG = kLong, 00195 MEDIUM = kMedium, 00196 SHORT = kShort, 00197 DEFAULT = kDefault, 00198 DATE_OFFSET = kDateOffset, 00199 NONE = kNone, 00200 DATE_TIME = kDateTime 00201 }; 00202 00207 virtual ~DateFormat(); 00208 00213 virtual UBool operator==(const Format&) const; 00214 00230 virtual UnicodeString& format(const Formattable& obj, 00231 UnicodeString& toAppendTo, 00232 FieldPosition& pos, 00233 UErrorCode& status) const; 00234 00263 virtual UnicodeString& format( UDate date, 00264 UnicodeString& toAppendTo, 00265 FieldPosition& fieldPosition) const = 0; 00266 00277 UnicodeString& format(UDate date, UnicodeString& result) const; 00278 00283 UnicodeString& format(const Formattable& obj, 00284 UnicodeString& result, 00285 UErrorCode& status) const; 00286 00297 virtual UDate parse( const UnicodeString& text, 00298 UErrorCode& status) const; 00299 00319 virtual UDate parse( const UnicodeString& text, 00320 ParsePosition& pos) const = 0; 00321 00348 virtual void parseObject(const UnicodeString& source, 00349 Formattable& result, 00350 ParsePosition& parse_pos) const; 00351 00359 static DateFormat* createInstance(void); 00360 00371 static DateFormat* createTimeInstance(EStyle style = kDefault, 00372 const Locale& aLocale = Locale::getDefault()); 00373 00384 static DateFormat* createDateInstance(EStyle style = kDefault, 00385 const Locale& aLocale = Locale::getDefault()); 00386 00399 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault, 00400 EStyle timeStyle = kDefault, 00401 const Locale& aLocale = Locale::getDefault()); 00402 00410 static const Locale* getAvailableLocales(int32_t& count); 00411 00416 virtual UBool isLenient(void) const; 00417 00426 virtual void setLenient(UBool lenient); 00427 00433 virtual const Calendar* getCalendar(void) const; 00434 00441 virtual void adoptCalendar(Calendar* calendarToAdopt); 00442 00448 virtual void setCalendar(const Calendar& newCalendar); 00449 00450 00457 virtual const NumberFormat* getNumberFormat(void) const; 00458 00465 virtual void adoptNumberFormat(NumberFormat* formatToAdopt); 00466 00472 virtual void setNumberFormat(const NumberFormat& newNumberFormat); 00473 00479 virtual const TimeZone& getTimeZone(void) const; 00480 00487 virtual void adoptTimeZone(TimeZone* zoneToAdopt); 00488 00494 virtual void setTimeZone(const TimeZone& zone); 00495 00496 00497 protected: 00504 DateFormat(); 00505 00510 DateFormat(const DateFormat&); 00511 00516 DateFormat& operator=(const DateFormat&); 00517 00523 Calendar* fCalendar; 00524 00530 NumberFormat* fNumberFormat; 00531 00532 private: 00541 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&); 00542 00547 static int32_t fgLocalesCount; 00548 00553 static const Locale* fgLocales; 00554 }; 00555 00556 inline UnicodeString& 00557 DateFormat::format(const Formattable& obj, 00558 UnicodeString& result, 00559 UErrorCode& status) const { 00560 return Format::format(obj, result, status); 00561 } 00562 00563 #endif // _DATEFMT 00564 //eof