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 kExtendedYearField,
00171 kJulianDayField,
00172 kMillisecondsInDayField,
00173
00174
00179 ERA_FIELD = kEraField,
00180 YEAR_FIELD = kYearField,
00181 MONTH_FIELD = kMonthField,
00182 DATE_FIELD = kDateField,
00183 HOUR_OF_DAY1_FIELD = kHourOfDay1Field,
00184 HOUR_OF_DAY0_FIELD = kHourOfDay0Field,
00185 MINUTE_FIELD = kMinuteField,
00186 SECOND_FIELD = kSecondField,
00187 MILLISECOND_FIELD = kMillisecondField,
00188 DAY_OF_WEEK_FIELD = kDayOfWeekField,
00189 DAY_OF_YEAR_FIELD = kDayOfYearField,
00190 DAY_OF_WEEK_IN_MONTH_FIELD = kDayOfWeekInMonthField,
00191 WEEK_OF_YEAR_FIELD = kWeekOfYearField,
00192 WEEK_OF_MONTH_FIELD = kWeekOfMonthField,
00193 AM_PM_FIELD = kAmPmField,
00194 HOUR1_FIELD = kHour1Field,
00195 HOUR0_FIELD = kHour0Field,
00196 TIMEZONE_FIELD = kTimezoneField
00197
00198 };
00199
00207 enum EStyle
00208 {
00209 kNone = -1,
00210
00211 kFull = 0,
00212 kLong = 1,
00213 kMedium = 2,
00214 kShort = 3,
00215
00216 kDateOffset = kShort + 1,
00217
00218
00219
00220
00221
00222 kDateTime = 8,
00223
00224 kDefault = kMedium,
00225
00226
00227
00232 FULL = kFull,
00233 LONG = kLong,
00234 MEDIUM = kMedium,
00235 SHORT = kShort,
00236 DEFAULT = kDefault,
00237 DATE_OFFSET = kDateOffset,
00238 NONE = kNone,
00239 DATE_TIME = kDateTime
00240 };
00241
00246 virtual ~DateFormat();
00247
00252 virtual UBool operator==(const Format&) const;
00253
00268 virtual UnicodeString& format(const Formattable& obj,
00269 UnicodeString& appendTo,
00270 FieldPosition& pos,
00271 UErrorCode& status) const;
00272
00302 virtual UnicodeString& format( Calendar& cal,
00303 UnicodeString& appendTo,
00304 FieldPosition& fieldPosition) const = 0;
00305
00333 UnicodeString& format( UDate date,
00334 UnicodeString& appendTo,
00335 FieldPosition& fieldPosition) const;
00336
00348 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00349
00360 UnicodeString& format(const Formattable& obj,
00361 UnicodeString& appendTo,
00362 UErrorCode& status) const;
00363
00374 virtual UDate parse( const UnicodeString& text,
00375 UErrorCode& status) const;
00376
00398 virtual void parse( const UnicodeString& text,
00399 Calendar& cal,
00400 ParsePosition& pos) const = 0;
00401
00421 UDate parse( const UnicodeString& text,
00422 ParsePosition& pos) const;
00423
00450 virtual void parseObject(const UnicodeString& source,
00451 Formattable& result,
00452 ParsePosition& parse_pos) const;
00453
00461 static DateFormat* createInstance(void);
00462
00473 static DateFormat* createTimeInstance(EStyle style = kDefault,
00474 const Locale& aLocale = Locale::getDefault());
00475
00486 static DateFormat* createDateInstance(EStyle style = kDefault,
00487 const Locale& aLocale = Locale::getDefault());
00488
00501 static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00502 EStyle timeStyle = kDefault,
00503 const Locale& aLocale = Locale::getDefault());
00504
00512 static const Locale* getAvailableLocales(int32_t& count);
00513
00518 virtual UBool isLenient(void) const;
00519
00530 virtual void setLenient(UBool lenient);
00531
00537 virtual const Calendar* getCalendar(void) const;
00538
00548 virtual void adoptCalendar(Calendar* calendarToAdopt);
00549
00557 virtual void setCalendar(const Calendar& newCalendar);
00558
00559
00566 virtual const NumberFormat* getNumberFormat(void) const;
00567
00574 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00575
00581 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00582
00588 virtual const TimeZone& getTimeZone(void) const;
00589
00596 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00597
00603 virtual void setTimeZone(const TimeZone& zone);
00604
00605 protected:
00612 DateFormat();
00613
00618 DateFormat(const DateFormat&);
00619
00624 DateFormat& operator=(const DateFormat&);
00625
00632 Calendar* fCalendar;
00633
00640 NumberFormat* fNumberFormat;
00641
00642 private:
00651 static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00652 };
00653
00654 inline UnicodeString&
00655 DateFormat::format(const Formattable& obj,
00656 UnicodeString& appendTo,
00657 UErrorCode& status) const {
00658 return Format::format(obj, appendTo, status);
00659 }
00660 U_NAMESPACE_END
00661
00662 #endif
00663
00664 #endif // _DATEFMT
00665