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 class TimeZone;
00028
00108 class U_I18N_API DateFormat : public Format {
00109 public:
00120 enum EField
00121 {
00122 kEraField = 0,
00123 kYearField,
00124 kMonthField,
00125 kDateField,
00126 kHourOfDay1Field,
00127
00128
00129 kHourOfDay0Field,
00130
00131
00132 kMinuteField,
00133 kSecondField,
00134 kMillisecondField,
00135 kDayOfWeekField,
00136 kDayOfYearField,
00137 kDayOfWeekInMonthField,
00138 kWeekOfYearField,
00139 kWeekOfMonthField,
00140 kAmPmField,
00141 kHour1Field,
00142
00143
00144 kHour0Field,
00145
00146
00147 kTimezoneField,
00148 kYearWOYField,
00149 kDOWLocalField,
00150
00151
00152
00157 ERA_FIELD = kEraField,
00158 YEAR_FIELD = kYearField,
00159 MONTH_FIELD = kMonthField,
00160 DATE_FIELD = kDateField,
00161 HOUR_OF_DAY1_FIELD = kHourOfDay1Field,
00162 HOUR_OF_DAY0_FIELD = kHourOfDay0Field,
00163 MINUTE_FIELD = kMinuteField,
00164 SECOND_FIELD = kSecondField,
00165 MILLISECOND_FIELD = kMillisecondField,
00166 DAY_OF_WEEK_FIELD = kDayOfWeekField,
00167 DAY_OF_YEAR_FIELD = kDayOfYearField,
00168 DAY_OF_WEEK_IN_MONTH_FIELD = kDayOfWeekInMonthField,
00169 WEEK_OF_YEAR_FIELD = kWeekOfYearField,
00170 WEEK_OF_MONTH_FIELD = kWeekOfMonthField,
00171 AM_PM_FIELD = kAmPmField,
00172 HOUR1_FIELD = kHour1Field,
00173 HOUR0_FIELD = kHour0Field,
00174 TIMEZONE_FIELD = kTimezoneField
00175
00176 };
00177
00184 enum EStyle
00185 {
00186 kNone = -1,
00187
00188 kFull = 0,
00189 kLong = 1,
00190 kMedium = 2,
00191 kShort = 3,
00192
00193 kDateOffset = kShort + 1,
00194
00195
00196
00197
00198
00199 kDateTime = 8,
00200
00201 kDefault = kMedium,
00202
00203
00204
00209 FULL = kFull,
00210 LONG = kLong,
00211 MEDIUM = kMedium,
00212 SHORT = kShort,
00213 DEFAULT = kDefault,
00214 DATE_OFFSET = kDateOffset,
00215 NONE = kNone,
00216 DATE_TIME = kDateTime
00217 };
00218
00223 virtual ~DateFormat();
00224
00229 virtual UBool operator==(const Format&) const;
00230
00246 virtual UnicodeString& format(const Formattable& obj,
00247 UnicodeString& toAppendTo,
00248 FieldPosition& pos,
00249 UErrorCode& status) const;
00250
00279 virtual UnicodeString& format( UDate date,
00280 UnicodeString& toAppendTo,
00281 FieldPosition& fieldPosition) const = 0;
00282
00293 UnicodeString& format(UDate date, UnicodeString& result) const;
00294
00299 UnicodeString& format(const Formattable& obj,
00300 UnicodeString& result,
00301 UErrorCode& status) const;
00302
00313 virtual UDate parse( const UnicodeString& text,
00314 UErrorCode& status) const;
00315
00335 virtual UDate parse( const UnicodeString& text,
00336 ParsePosition& pos) const = 0;
00337
00364 virtual void parseObject(const UnicodeString& source,
00365 Formattable& result,
00366 ParsePosition& parse_pos) const;
00367
00375 static DateFormat* createInstance(void);
00376
00387 static DateFormat* createTimeInstance(EStyle style = kDefault,
00388 const Locale& aLocale = Locale::getDefault());
00389
00400 static DateFormat* createDateInstance(EStyle style = kDefault,
00401 const Locale& aLocale = Locale::getDefault());
00402
00415 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00416 EStyle timeStyle = kDefault,
00417 const Locale& aLocale = Locale::getDefault());
00418
00426 static const Locale* getAvailableLocales(int32_t& count);
00427
00432 virtual UBool isLenient(void) const;
00433
00442 virtual void setLenient(UBool lenient);
00443
00449 virtual const Calendar* getCalendar(void) const;
00450
00457 virtual void adoptCalendar(Calendar* calendarToAdopt);
00458
00464 virtual void setCalendar(const Calendar& newCalendar);
00465
00466
00473 virtual const NumberFormat* getNumberFormat(void) const;
00474
00481 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00482
00488 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00489
00495 virtual const TimeZone& getTimeZone(void) const;
00496
00503 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00504
00510 virtual void setTimeZone(const TimeZone& zone);
00511
00512
00513 protected:
00520 DateFormat();
00521
00526 DateFormat(const DateFormat&);
00527
00532 DateFormat& operator=(const DateFormat&);
00533
00539 Calendar* fCalendar;
00540
00546 NumberFormat* fNumberFormat;
00547
00548 private:
00557 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00558
00563 static int32_t fgLocalesCount;
00564
00569 static const Locale* fgLocales;
00570 };
00571
00572 inline UnicodeString&
00573 DateFormat::format(const Formattable& obj,
00574 UnicodeString& result,
00575 UErrorCode& status) const {
00576 return Format::format(obj, result, status);
00577 }
00578
00579 #endif // _DATEFMT
00580