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
00024 #if !UCONFIG_NO_FORMATTING
00025
00026 #include "unicode/calendar.h"
00027 #include "unicode/numfmt.h"
00028 #include "unicode/format.h"
00029 #include "unicode/locid.h"
00030
00031 U_NAMESPACE_BEGIN
00032
00033 class TimeZone;
00034
00127 class U_I18N_API DateFormat : public Format {
00128 public:
00140 enum EField
00141 {
00142 kEraField = 0,
00143 kYearField,
00144 kMonthField,
00145 kDateField,
00146 kHourOfDay1Field,
00147
00148
00149 kHourOfDay0Field,
00150
00151
00152 kMinuteField,
00153 kSecondField,
00154 kMillisecondField,
00155 kDayOfWeekField,
00156 kDayOfYearField,
00157 kDayOfWeekInMonthField,
00158 kWeekOfYearField,
00159 kWeekOfMonthField,
00160 kAmPmField,
00161 kHour1Field,
00162
00163
00164 kHour0Field,
00165
00166
00167 kTimezoneField,
00168 kYearWOYField,
00169 kDOWLocalField,
00170
00171
00172
00177 ERA_FIELD = kEraField,
00178 YEAR_FIELD = kYearField,
00179 MONTH_FIELD = kMonthField,
00180 DATE_FIELD = kDateField,
00181 HOUR_OF_DAY1_FIELD = kHourOfDay1Field,
00182 HOUR_OF_DAY0_FIELD = kHourOfDay0Field,
00183 MINUTE_FIELD = kMinuteField,
00184 SECOND_FIELD = kSecondField,
00185 MILLISECOND_FIELD = kMillisecondField,
00186 DAY_OF_WEEK_FIELD = kDayOfWeekField,
00187 DAY_OF_YEAR_FIELD = kDayOfYearField,
00188 DAY_OF_WEEK_IN_MONTH_FIELD = kDayOfWeekInMonthField,
00189 WEEK_OF_YEAR_FIELD = kWeekOfYearField,
00190 WEEK_OF_MONTH_FIELD = kWeekOfMonthField,
00191 AM_PM_FIELD = kAmPmField,
00192 HOUR1_FIELD = kHour1Field,
00193 HOUR0_FIELD = kHour0Field,
00194 TIMEZONE_FIELD = kTimezoneField
00195
00196 };
00197
00205 enum EStyle
00206 {
00207 kNone = -1,
00208
00209 kFull = 0,
00210 kLong = 1,
00211 kMedium = 2,
00212 kShort = 3,
00213
00214 kDateOffset = kShort + 1,
00215
00216
00217
00218
00219
00220 kDateTime = 8,
00221
00222 kDefault = kMedium,
00223
00224
00225
00230 FULL = kFull,
00231 LONG = kLong,
00232 MEDIUM = kMedium,
00233 SHORT = kShort,
00234 DEFAULT = kDefault,
00235 DATE_OFFSET = kDateOffset,
00236 NONE = kNone,
00237 DATE_TIME = kDateTime
00238 };
00239
00244 virtual ~DateFormat();
00245
00250 virtual UBool operator==(const Format&) const;
00251
00266 virtual UnicodeString& format(const Formattable& obj,
00267 UnicodeString& appendTo,
00268 FieldPosition& pos,
00269 UErrorCode& status) const;
00270
00300 virtual UnicodeString& format( Calendar& cal,
00301 UnicodeString& appendTo,
00302 FieldPosition& fieldPosition) const = 0;
00303
00331 UnicodeString& format( UDate date,
00332 UnicodeString& appendTo,
00333 FieldPosition& fieldPosition) const;
00334
00346 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00347
00358 UnicodeString& format(const Formattable& obj,
00359 UnicodeString& appendTo,
00360 UErrorCode& status) const;
00361
00372 virtual UDate parse( const UnicodeString& text,
00373 UErrorCode& status) const;
00374
00396 virtual void parse( const UnicodeString& text,
00397 Calendar& cal,
00398 ParsePosition& pos) const = 0;
00399
00419 UDate parse( const UnicodeString& text,
00420 ParsePosition& pos) const;
00421
00448 virtual void parseObject(const UnicodeString& source,
00449 Formattable& result,
00450 ParsePosition& parse_pos) const;
00451
00459 static DateFormat* createInstance(void);
00460
00471 static DateFormat* createTimeInstance(EStyle style = kDefault,
00472 const Locale& aLocale = Locale::getDefault());
00473
00484 static DateFormat* createDateInstance(EStyle style = kDefault,
00485 const Locale& aLocale = Locale::getDefault());
00486
00499 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00500 EStyle timeStyle = kDefault,
00501 const Locale& aLocale = Locale::getDefault());
00502
00510 static const Locale* getAvailableLocales(int32_t& count);
00511
00516 virtual UBool isLenient(void) const;
00517
00528 virtual void setLenient(UBool lenient);
00529
00535 virtual const Calendar* getCalendar(void) const;
00536
00546 virtual void adoptCalendar(Calendar* calendarToAdopt);
00547
00555 virtual void setCalendar(const Calendar& newCalendar);
00556
00557
00564 virtual const NumberFormat* getNumberFormat(void) const;
00565
00572 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00573
00579 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00580
00586 virtual const TimeZone& getTimeZone(void) const;
00587
00594 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00595
00601 virtual void setTimeZone(const TimeZone& zone);
00602
00603
00604 protected:
00611 DateFormat();
00612
00617 DateFormat(const DateFormat&);
00618
00623 DateFormat& operator=(const DateFormat&);
00624
00631 Calendar* fCalendar;
00632
00639 NumberFormat* fNumberFormat;
00640
00641 private:
00650 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00651 };
00652
00653 inline UnicodeString&
00654 DateFormat::format(const Formattable& obj,
00655 UnicodeString& appendTo,
00656 UErrorCode& status) const {
00657 return Format::format(obj, appendTo, status);
00658 }
00659 U_NAMESPACE_END
00660
00661 #endif
00662
00663 #endif // _DATEFMT
00664