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 class DateTimePatternGenerator;
00041
00138 class U_I18N_API DateFormat : public Format {
00139 public:
00140
00148 enum EStyle
00149 {
00150 kNone = -1,
00151
00152 kFull = 0,
00153 kLong = 1,
00154 kMedium = 2,
00155 kShort = 3,
00156
00157 kDateOffset = kShort + 1,
00158
00159
00160
00161
00162
00163 kDateTime = 8,
00164
00165
00166 kDateTimeOffset = kDateTime + 1,
00167
00168
00169
00170
00171
00172
00173 kRelative = (1 << 7),
00174
00175 kFullRelative = (kFull | kRelative),
00176
00177 kLongRelative = kLong | kRelative,
00178
00179 kMediumRelative = kMedium | kRelative,
00180
00181 kShortRelative = kShort | kRelative,
00182
00183
00184 kDefault = kMedium,
00185
00186
00187
00192 FULL = kFull,
00193 LONG = kLong,
00194 MEDIUM = kMedium,
00195 SHORT = kShort,
00196 DEFAULT = kDefault,
00197 DATE_OFFSET = kDateOffset,
00198 NONE = kNone,
00199 DATE_TIME = kDateTime
00200 };
00201
00206 virtual ~DateFormat();
00207
00212 virtual UBool operator==(const Format&) const;
00213
00214
00215 using Format::format;
00216
00231 virtual UnicodeString& format(const Formattable& obj,
00232 UnicodeString& appendTo,
00233 FieldPosition& pos,
00234 UErrorCode& status) const;
00235
00251 virtual UnicodeString& format(const Formattable& obj,
00252 UnicodeString& appendTo,
00253 FieldPositionIterator* posIter,
00254 UErrorCode& status) const;
00288 virtual UnicodeString& format( Calendar& cal,
00289 UnicodeString& appendTo,
00290 FieldPosition& fieldPosition) const = 0;
00291
00310 virtual UnicodeString& format(Calendar& cal,
00311 UnicodeString& appendTo,
00312 FieldPositionIterator* posIter,
00313 UErrorCode& status) const;
00341 UnicodeString& format( UDate date,
00342 UnicodeString& appendTo,
00343 FieldPosition& fieldPosition) const;
00344
00358 UnicodeString& format(UDate date,
00359 UnicodeString& appendTo,
00360 FieldPositionIterator* posIter,
00361 UErrorCode& status) const;
00373 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00374
00385 UnicodeString& format(const Formattable& obj,
00386 UnicodeString& appendTo,
00387 UErrorCode& status) const;
00388
00423 virtual UDate parse( const UnicodeString& text,
00424 UErrorCode& status) const;
00425
00452 virtual void parse( const UnicodeString& text,
00453 Calendar& cal,
00454 ParsePosition& pos) const = 0;
00455
00486 UDate parse( const UnicodeString& text,
00487 ParsePosition& pos) const;
00488
00512 virtual void parseObject(const UnicodeString& source,
00513 Formattable& result,
00514 ParsePosition& parse_pos) const;
00515
00523 static DateFormat* U_EXPORT2 createInstance(void);
00524
00536 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00537 const Locale& aLocale = Locale::getDefault());
00538
00554 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00555 const Locale& aLocale = Locale::getDefault());
00556
00575 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00576 EStyle timeStyle = kDefault,
00577 const Locale& aLocale = Locale::getDefault());
00578
00586 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00587
00592 virtual UBool isLenient(void) const;
00593
00604 virtual void setLenient(UBool lenient);
00605
00611 virtual const Calendar* getCalendar(void) const;
00612
00622 virtual void adoptCalendar(Calendar* calendarToAdopt);
00623
00631 virtual void setCalendar(const Calendar& newCalendar);
00632
00633
00640 virtual const NumberFormat* getNumberFormat(void) const;
00641
00648 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00649
00655 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00656
00662 virtual const TimeZone& getTimeZone(void) const;
00663
00670 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00671
00677 virtual void setTimeZone(const TimeZone& zone);
00678
00679 protected:
00686 DateFormat();
00687
00692 DateFormat(const DateFormat&);
00693
00698 DateFormat& operator=(const DateFormat&);
00699
00706 Calendar* fCalendar;
00707
00714 NumberFormat* fNumberFormat;
00715
00716 private:
00725 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
00726
00727 public:
00728 #ifndef U_HIDE_OBSOLETE_API
00729
00734 enum EField
00735 {
00736
00737 kEraField = UDAT_ERA_FIELD,
00738 kYearField = UDAT_YEAR_FIELD,
00739 kMonthField = UDAT_MONTH_FIELD,
00740 kDateField = UDAT_DATE_FIELD,
00741 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00742 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00743 kMinuteField = UDAT_MINUTE_FIELD,
00744 kSecondField = UDAT_SECOND_FIELD,
00745 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00746 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00747 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00748 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00749 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00750 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00751 kAmPmField = UDAT_AM_PM_FIELD,
00752 kHour1Field = UDAT_HOUR1_FIELD,
00753 kHour0Field = UDAT_HOUR0_FIELD,
00754 kTimezoneField = UDAT_TIMEZONE_FIELD,
00755 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00756 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00757 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00758 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00759 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00760
00761
00762 ERA_FIELD = UDAT_ERA_FIELD,
00763 YEAR_FIELD = UDAT_YEAR_FIELD,
00764 MONTH_FIELD = UDAT_MONTH_FIELD,
00765 DATE_FIELD = UDAT_DATE_FIELD,
00766 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00767 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00768 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00769 SECOND_FIELD = UDAT_SECOND_FIELD,
00770 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00771 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00772 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00773 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00774 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00775 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00776 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00777 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00778 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00779 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00780 };
00781 #endif
00782 };
00783
00784 inline UnicodeString&
00785 DateFormat::format(const Formattable& obj,
00786 UnicodeString& appendTo,
00787 UErrorCode& status) const {
00788 return Format::format(obj, appendTo, status);
00789 }
00790 U_NAMESPACE_END
00791
00792 #endif
00793
00794 #endif // _DATEFMT
00795