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/udat.h"
00027 #include "unicode/calendar.h"
00028 #include "unicode/numfmt.h"
00029 #include "unicode/format.h"
00030 #include "unicode/locid.h"
00031
00037 U_NAMESPACE_BEGIN
00038
00039 class TimeZone;
00040
00137 class U_I18N_API DateFormat : public Format {
00138 public:
00139
00147 enum EStyle
00148 {
00149 kNone = -1,
00150
00151 kFull = 0,
00152 kLong = 1,
00153 kMedium = 2,
00154 kShort = 3,
00155
00156 kDateOffset = kShort + 1,
00157
00158
00159
00160
00161
00162 kDateTime = 8,
00163
00164 kDefault = kMedium,
00165
00166
00167
00172 FULL = kFull,
00173 LONG = kLong,
00174 MEDIUM = kMedium,
00175 SHORT = kShort,
00176 DEFAULT = kDefault,
00177 DATE_OFFSET = kDateOffset,
00178 NONE = kNone,
00179 DATE_TIME = kDateTime
00180 };
00181
00186 virtual ~DateFormat();
00187
00192 virtual UBool operator==(const Format&) const;
00193
00208 virtual UnicodeString& format(const Formattable& obj,
00209 UnicodeString& appendTo,
00210 FieldPosition& pos,
00211 UErrorCode& status) const;
00212
00242 virtual UnicodeString& format( Calendar& cal,
00243 UnicodeString& appendTo,
00244 FieldPosition& fieldPosition) const = 0;
00245
00273 UnicodeString& format( UDate date,
00274 UnicodeString& appendTo,
00275 FieldPosition& fieldPosition) const;
00276
00288 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00289
00300 UnicodeString& format(const Formattable& obj,
00301 UnicodeString& appendTo,
00302 UErrorCode& status) const;
00303
00314 virtual UDate parse( const UnicodeString& text,
00315 UErrorCode& status) const;
00316
00338 virtual void parse( const UnicodeString& text,
00339 Calendar& cal,
00340 ParsePosition& pos) const = 0;
00341
00361 UDate parse( const UnicodeString& text,
00362 ParsePosition& pos) const;
00363
00390 virtual void parseObject(const UnicodeString& source,
00391 Formattable& result,
00392 ParsePosition& parse_pos) const;
00393
00401 static DateFormat* U_EXPORT2 createInstance(void);
00402
00413 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00414 const Locale& aLocale = Locale::getDefault());
00415
00426 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00427 const Locale& aLocale = Locale::getDefault());
00428
00441 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00442 EStyle timeStyle = kDefault,
00443 const Locale& aLocale = Locale::getDefault());
00444
00452 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00453
00458 virtual UBool isLenient(void) const;
00459
00470 virtual void setLenient(UBool lenient);
00471
00477 virtual const Calendar* getCalendar(void) const;
00478
00488 virtual void adoptCalendar(Calendar* calendarToAdopt);
00489
00497 virtual void setCalendar(const Calendar& newCalendar);
00498
00499
00506 virtual const NumberFormat* getNumberFormat(void) const;
00507
00514 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00515
00521 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00522
00528 virtual const TimeZone& getTimeZone(void) const;
00529
00536 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00537
00543 virtual void setTimeZone(const TimeZone& zone);
00544
00545 protected:
00552 DateFormat();
00553
00558 DateFormat(const DateFormat&);
00559
00564 DateFormat& operator=(const DateFormat&);
00565
00572 Calendar* fCalendar;
00573
00580 NumberFormat* fNumberFormat;
00581
00582 private:
00591 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00592
00593 public:
00599 enum EField
00600 {
00601
00602 kEraField = UDAT_ERA_FIELD,
00603 kYearField = UDAT_YEAR_FIELD,
00604 kMonthField = UDAT_MONTH_FIELD,
00605 kDateField = UDAT_DATE_FIELD,
00606 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00607 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00608 kMinuteField = UDAT_MINUTE_FIELD,
00609 kSecondField = UDAT_SECOND_FIELD,
00610 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00611 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00612 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00613 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00614 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00615 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00616 kAmPmField = UDAT_AM_PM_FIELD,
00617 kHour1Field = UDAT_HOUR1_FIELD,
00618 kHour0Field = UDAT_HOUR0_FIELD,
00619 kTimezoneField = UDAT_TIMEZONE_FIELD,
00620 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00621 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00622 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00623 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00624 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00625
00626
00627 ERA_FIELD = UDAT_ERA_FIELD,
00628 YEAR_FIELD = UDAT_YEAR_FIELD,
00629 MONTH_FIELD = UDAT_MONTH_FIELD,
00630 DATE_FIELD = UDAT_DATE_FIELD,
00631 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00632 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00633 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00634 SECOND_FIELD = UDAT_SECOND_FIELD,
00635 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00636 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00637 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00638 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00639 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00640 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00641 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00642 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00643 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00644 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00645 };
00646 };
00647
00648 inline UnicodeString&
00649 DateFormat::format(const Formattable& obj,
00650 UnicodeString& appendTo,
00651 UErrorCode& status) const {
00652 return Format::format(obj, appendTo, status);
00653 }
00654 U_NAMESPACE_END
00655
00656 #endif
00657
00658 #endif // _DATEFMT
00659