00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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
00028 U_NAMESPACE_BEGIN
00029
00030 class TimeZone;
00031
00124 class U_I18N_API DateFormat : public Format {
00125 public:
00136 enum EField
00137 {
00138 kEraField = 0,
00139 kYearField,
00140 kMonthField,
00141 kDateField,
00142 kHourOfDay1Field,
00143
00144
00145 kHourOfDay0Field,
00146
00147
00148 kMinuteField,
00149 kSecondField,
00150 kMillisecondField,
00151 kDayOfWeekField,
00152 kDayOfYearField,
00153 kDayOfWeekInMonthField,
00154 kWeekOfYearField,
00155 kWeekOfMonthField,
00156 kAmPmField,
00157 kHour1Field,
00158
00159
00160 kHour0Field,
00161
00162
00163 kTimezoneField,
00164 kYearWOYField,
00165 kDOWLocalField,
00166
00167
00168
00173 ERA_FIELD = kEraField,
00174 YEAR_FIELD = kYearField,
00175 MONTH_FIELD = kMonthField,
00176 DATE_FIELD = kDateField,
00177 HOUR_OF_DAY1_FIELD = kHourOfDay1Field,
00178 HOUR_OF_DAY0_FIELD = kHourOfDay0Field,
00179 MINUTE_FIELD = kMinuteField,
00180 SECOND_FIELD = kSecondField,
00181 MILLISECOND_FIELD = kMillisecondField,
00182 DAY_OF_WEEK_FIELD = kDayOfWeekField,
00183 DAY_OF_YEAR_FIELD = kDayOfYearField,
00184 DAY_OF_WEEK_IN_MONTH_FIELD = kDayOfWeekInMonthField,
00185 WEEK_OF_YEAR_FIELD = kWeekOfYearField,
00186 WEEK_OF_MONTH_FIELD = kWeekOfMonthField,
00187 AM_PM_FIELD = kAmPmField,
00188 HOUR1_FIELD = kHour1Field,
00189 HOUR0_FIELD = kHour0Field,
00190 TIMEZONE_FIELD = kTimezoneField
00191
00192 };
00193
00200 enum EStyle
00201 {
00202 kNone = -1,
00203
00204 kFull = 0,
00205 kLong = 1,
00206 kMedium = 2,
00207 kShort = 3,
00208
00209 kDateOffset = kShort + 1,
00210
00211
00212
00213
00214
00215 kDateTime = 8,
00216
00217 kDefault = kMedium,
00218
00219
00220
00225 FULL = kFull,
00226 LONG = kLong,
00227 MEDIUM = kMedium,
00228 SHORT = kShort,
00229 DEFAULT = kDefault,
00230 DATE_OFFSET = kDateOffset,
00231 NONE = kNone,
00232 DATE_TIME = kDateTime
00233 };
00234
00239 virtual ~DateFormat();
00240
00245 virtual UBool operator==(const Format&) const;
00246
00262 virtual UnicodeString& format(const Formattable& obj,
00263 UnicodeString& toAppendTo,
00264 FieldPosition& pos,
00265 UErrorCode& status) const;
00266
00296 virtual UnicodeString& format( Calendar& cal,
00297 UnicodeString& toAppendTo,
00298 FieldPosition& fieldPosition) const = 0;
00299
00327 UnicodeString& format( UDate date,
00328 UnicodeString& toAppendTo,
00329 FieldPosition& fieldPosition) const;
00330
00341 UnicodeString& format(UDate date, UnicodeString& result) const;
00342
00352 UnicodeString& format(const Formattable& obj,
00353 UnicodeString& result,
00354 UErrorCode& status) const;
00355
00366 virtual UDate parse( const UnicodeString& text,
00367 UErrorCode& status) const;
00368
00390 virtual void parse( const UnicodeString& text,
00391 Calendar& cal,
00392 ParsePosition& pos) const = 0;
00393
00413 UDate parse( const UnicodeString& text,
00414 ParsePosition& pos) const;
00415
00442 virtual void parseObject(const UnicodeString& source,
00443 Formattable& result,
00444 ParsePosition& parse_pos) const;
00445
00453 static DateFormat* createInstance(void);
00454
00465 static DateFormat* createTimeInstance(EStyle style = kDefault,
00466 const Locale& aLocale = Locale::getDefault());
00467
00478 static DateFormat* createDateInstance(EStyle style = kDefault,
00479 const Locale& aLocale = Locale::getDefault());
00480
00493 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00494 EStyle timeStyle = kDefault,
00495 const Locale& aLocale = Locale::getDefault());
00496
00504 static const Locale* getAvailableLocales(int32_t& count);
00505
00510 virtual UBool isLenient(void) const;
00511
00522 virtual void setLenient(UBool lenient);
00523
00529 virtual const Calendar* getCalendar(void) const;
00530
00539 virtual void adoptCalendar(Calendar* calendarToAdopt);
00540
00548 virtual void setCalendar(const Calendar& newCalendar);
00549
00550
00557 virtual const NumberFormat* getNumberFormat(void) const;
00558
00565 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00566
00572 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00573
00579 virtual const TimeZone& getTimeZone(void) const;
00580
00587 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00588
00594 virtual void setTimeZone(const TimeZone& zone);
00595
00596
00597 protected:
00604 DateFormat();
00605
00610 DateFormat(const DateFormat&);
00611
00616 DateFormat& operator=(const DateFormat&);
00617
00623 Calendar* fCalendar;
00624
00630 NumberFormat* fNumberFormat;
00631
00632 private:
00641 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00642 };
00643
00644 inline UnicodeString&
00645 DateFormat::format(const Formattable& obj,
00646 UnicodeString& result,
00647 UErrorCode& status) const {
00648 return Format::format(obj, result, status);
00649 }
00650 U_NAMESPACE_END
00651
00652 #endif // _DATEFMT
00653