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
00347 UnicodeString& format(const Formattable& obj,
00348 UnicodeString& result,
00349 UErrorCode& status) const;
00350
00361 virtual UDate parse( const UnicodeString& text,
00362 UErrorCode& status) const;
00363
00383 virtual void parse( const UnicodeString& text,
00384 Calendar& cal,
00385 ParsePosition& pos) const = 0;
00386
00406 UDate parse( const UnicodeString& text,
00407 ParsePosition& pos) const;
00408
00435 virtual void parseObject(const UnicodeString& source,
00436 Formattable& result,
00437 ParsePosition& parse_pos) const;
00438
00446 static DateFormat* createInstance(void);
00447
00458 static DateFormat* createTimeInstance(EStyle style = kDefault,
00459 const Locale& aLocale = Locale::getDefault());
00460
00471 static DateFormat* createDateInstance(EStyle style = kDefault,
00472 const Locale& aLocale = Locale::getDefault());
00473
00486 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00487 EStyle timeStyle = kDefault,
00488 const Locale& aLocale = Locale::getDefault());
00489
00497 static const Locale* getAvailableLocales(int32_t& count);
00498
00503 virtual UBool isLenient(void) const;
00504
00513 virtual void setLenient(UBool lenient);
00514
00520 virtual const Calendar* getCalendar(void) const;
00521
00528 virtual void adoptCalendar(Calendar* calendarToAdopt);
00529
00535 virtual void setCalendar(const Calendar& newCalendar);
00536
00537
00544 virtual const NumberFormat* getNumberFormat(void) const;
00545
00552 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00553
00559 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00560
00566 virtual const TimeZone& getTimeZone(void) const;
00567
00574 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00575
00581 virtual void setTimeZone(const TimeZone& zone);
00582
00583
00584 protected:
00591 DateFormat();
00592
00597 DateFormat(const DateFormat&);
00598
00603 DateFormat& operator=(const DateFormat&);
00604
00610 Calendar* fCalendar;
00611
00617 NumberFormat* fNumberFormat;
00618
00619 private:
00628 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00629 };
00630
00631 inline UnicodeString&
00632 DateFormat::format(const Formattable& obj,
00633 UnicodeString& result,
00634 UErrorCode& status) const {
00635 return Format::format(obj, result, status);
00636 }
00637 U_NAMESPACE_END
00638
00639 #endif // _DATEFMT
00640