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
00165
00166 kRelative = (1 << 7),
00167
00168 kFullRelative = (kFull | kRelative),
00169
00170 kLongRelative = kLong | kRelative,
00171
00172 kMediumRelative = kMedium | kRelative,
00173
00174 kShortRelative = kShort | kRelative,
00175
00176
00177 kDefault = kMedium,
00178
00179
00180
00185 FULL = kFull,
00186 LONG = kLong,
00187 MEDIUM = kMedium,
00188 SHORT = kShort,
00189 DEFAULT = kDefault,
00190 DATE_OFFSET = kDateOffset,
00191 NONE = kNone,
00192 DATE_TIME = kDateTime
00193 };
00194
00199 virtual ~DateFormat();
00200
00205 virtual UBool operator==(const Format&) const;
00206
00221 virtual UnicodeString& format(const Formattable& obj,
00222 UnicodeString& appendTo,
00223 FieldPosition& pos,
00224 UErrorCode& status) const;
00225
00255 virtual UnicodeString& format( Calendar& cal,
00256 UnicodeString& appendTo,
00257 FieldPosition& fieldPosition) const = 0;
00258
00286 UnicodeString& format( UDate date,
00287 UnicodeString& appendTo,
00288 FieldPosition& fieldPosition) const;
00289
00301 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00302
00313 UnicodeString& format(const Formattable& obj,
00314 UnicodeString& appendTo,
00315 UErrorCode& status) const;
00316
00327 virtual UDate parse( const UnicodeString& text,
00328 UErrorCode& status) const;
00329
00351 virtual void parse( const UnicodeString& text,
00352 Calendar& cal,
00353 ParsePosition& pos) const = 0;
00354
00374 UDate parse( const UnicodeString& text,
00375 ParsePosition& pos) const;
00376
00403 virtual void parseObject(const UnicodeString& source,
00404 Formattable& result,
00405 ParsePosition& parse_pos) const;
00406
00414 static DateFormat* U_EXPORT2 createInstance(void);
00415
00439 static DateFormat* U_EXPORT2 createPatternInstance(
00440 const UnicodeString& skeleton,
00441 const Locale& locale,
00442 UErrorCode& status);
00443
00454 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00455 const Locale& aLocale = Locale::getDefault());
00456
00467 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00468 const Locale& aLocale = Locale::getDefault());
00469
00482 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00483 EStyle timeStyle = kDefault,
00484 const Locale& aLocale = Locale::getDefault());
00485
00493 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00494
00499 virtual UBool isLenient(void) const;
00500
00511 virtual void setLenient(UBool lenient);
00512
00518 virtual const Calendar* getCalendar(void) const;
00519
00529 virtual void adoptCalendar(Calendar* calendarToAdopt);
00530
00538 virtual void setCalendar(const Calendar& newCalendar);
00539
00540
00547 virtual const NumberFormat* getNumberFormat(void) const;
00548
00555 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00556
00562 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00563
00569 virtual const TimeZone& getTimeZone(void) const;
00570
00577 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00578
00584 virtual void setTimeZone(const TimeZone& zone);
00585
00586 protected:
00593 DateFormat();
00594
00599 DateFormat(const DateFormat&);
00600
00605 DateFormat& operator=(const DateFormat&);
00606
00613 Calendar* fCalendar;
00614
00621 NumberFormat* fNumberFormat;
00622
00623 private:
00632 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00633
00634 public:
00640 enum EField
00641 {
00642
00643 kEraField = UDAT_ERA_FIELD,
00644 kYearField = UDAT_YEAR_FIELD,
00645 kMonthField = UDAT_MONTH_FIELD,
00646 kDateField = UDAT_DATE_FIELD,
00647 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00648 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00649 kMinuteField = UDAT_MINUTE_FIELD,
00650 kSecondField = UDAT_SECOND_FIELD,
00651 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00652 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00653 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00654 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00655 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00656 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00657 kAmPmField = UDAT_AM_PM_FIELD,
00658 kHour1Field = UDAT_HOUR1_FIELD,
00659 kHour0Field = UDAT_HOUR0_FIELD,
00660 kTimezoneField = UDAT_TIMEZONE_FIELD,
00661 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00662 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00663 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00664 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00665 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00666
00667
00668 ERA_FIELD = UDAT_ERA_FIELD,
00669 YEAR_FIELD = UDAT_YEAR_FIELD,
00670 MONTH_FIELD = UDAT_MONTH_FIELD,
00671 DATE_FIELD = UDAT_DATE_FIELD,
00672 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00673 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00674 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00675 SECOND_FIELD = UDAT_SECOND_FIELD,
00676 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00677 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00678 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00679 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00680 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00681 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00682 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00683 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00684 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00685 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00686 };
00687 };
00688
00689 inline UnicodeString&
00690 DateFormat::format(const Formattable& obj,
00691 UnicodeString& appendTo,
00692 UErrorCode& status) const {
00693 return Format::format(obj, appendTo, status);
00694 }
00695 U_NAMESPACE_END
00696
00697 #endif
00698
00699 #endif // _DATEFMT
00700