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
00295 virtual UnicodeString& format( UDate date,
00296 UnicodeString& toAppendTo,
00297 FieldPosition& fieldPosition) const = 0;
00298
00309 UnicodeString& format(UDate date, UnicodeString& result) const;
00310
00315 UnicodeString& format(const Formattable& obj,
00316 UnicodeString& result,
00317 UErrorCode& status) const;
00318
00329 virtual UDate parse( const UnicodeString& text,
00330 UErrorCode& status) const;
00331
00351 virtual UDate parse( const UnicodeString& text,
00352 ParsePosition& pos) const = 0;
00353
00380 virtual void parseObject(const UnicodeString& source,
00381 Formattable& result,
00382 ParsePosition& parse_pos) const;
00383
00391 static DateFormat* createInstance(void);
00392
00403 static DateFormat* createTimeInstance(EStyle style = kDefault,
00404 const Locale& aLocale = Locale::getDefault());
00405
00416 static DateFormat* createDateInstance(EStyle style = kDefault,
00417 const Locale& aLocale = Locale::getDefault());
00418
00431 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00432 EStyle timeStyle = kDefault,
00433 const Locale& aLocale = Locale::getDefault());
00434
00442 static const Locale* getAvailableLocales(int32_t& count);
00443
00448 virtual UBool isLenient(void) const;
00449
00458 virtual void setLenient(UBool lenient);
00459
00465 virtual const Calendar* getCalendar(void) const;
00466
00473 virtual void adoptCalendar(Calendar* calendarToAdopt);
00474
00480 virtual void setCalendar(const Calendar& newCalendar);
00481
00482
00489 virtual const NumberFormat* getNumberFormat(void) const;
00490
00497 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00498
00504 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00505
00511 virtual const TimeZone& getTimeZone(void) const;
00512
00519 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00520
00526 virtual void setTimeZone(const TimeZone& zone);
00527
00528
00529 protected:
00536 DateFormat();
00537
00542 DateFormat(const DateFormat&);
00543
00548 DateFormat& operator=(const DateFormat&);
00549
00555 Calendar* fCalendar;
00556
00562 NumberFormat* fNumberFormat;
00563
00564 private:
00573 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00574 };
00575
00576 inline UnicodeString&
00577 DateFormat::format(const Formattable& obj,
00578 UnicodeString& result,
00579 UErrorCode& status) const {
00580 return Format::format(obj, result, status);
00581 }
00582 U_NAMESPACE_END
00583
00584 #endif // _DATEFMT
00585