/* ******************************************************************************** * Copyright (C) 1997-1999, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************** * * File DATEFMT.H * * Modification History: * * Date Name Description * 02/19/97 aliu Converted from java. * 04/01/97 aliu Added support for centuries. * 07/23/98 stephen JDK 1.2 sync * 11/15/99 weiv Added support for week of year/day of week formatting ******************************************************************************** */ #ifndef DATEFMT_H #define DATEFMT_H #include "unicode/utypes.h" #include "unicode/calendar.h" #include "unicode/numfmt.h" #include "unicode/format.h" #include "unicode/locid.h" class TimeZone; class U_I18N_API DateFormat : public Format { public: enum EField { kEraField, // ERA field alignment. kYearField, // YEAR field alignment. kMonthField, // MONTH field alignment. kDateField, // DATE field alignment. kHourOfDay1Field, // One-based HOUR_OF_DAY field alignment. // kHourOfDay1Field is used for the one-based 24-hour clock. // For example, 23:59 + 01:00 results in 24:59. kHourOfDay0Field, // Zero-based HOUR_OF_DAY field alignment. // HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock. // For example, 23:59 + 01:00 results in 00:59. kMinuteField, // MINUTE field alignment. kSecondField, // SECOND field alignment. kMillisecondField, // MILLISECOND field alignment. kDayOfWeekField, // DAY_OF_WEEK field alignment. kDayOfYearField, // DAY_OF_YEAR field alignment. kDayOfWeekInMonthField,// DAY_OF_WEEK_IN_MONTH field alignment. kWeekOfYearField, // WEEK_OF_YEAR field alignment. kWeekOfMonthField, // WEEK_OF_MONTH field alignment. kAmPmField, // AM_PM field alignment. kHour1Field, // One-based HOUR field alignment. // HOUR1_FIELD is used for the one-based 12-hour clock. // For example, 11:30 PM + 1 hour results in 12:30 AM. kHour0Field, // Zero-based HOUR field alignment. // HOUR0_FIELD is used for the zero-based 12-hour clock. // For example, 11:30 PM + 1 hour results in 00:30 AM. kTimezoneField, // TIMEZONE field alignment. kYearWOYField, // Corrected year for week representation kDOWLocalField, // localized day of week ERA_FIELD = kEraField, YEAR_FIELD = kYearField, MONTH_FIELD = kMonthField, DATE_FIELD = kDateField, HOUR_OF_DAY1_FIELD = kHourOfDay1Field, HOUR_OF_DAY0_FIELD = kHourOfDay0Field, MINUTE_FIELD = kMinuteField, SECOND_FIELD = kSecondField, MILLISECOND_FIELD = kMillisecondField, DAY_OF_WEEK_FIELD = kDayOfWeekField, DAY_OF_YEAR_FIELD = kDayOfYearField, DAY_OF_WEEK_IN_MONTH_FIELD = kDayOfWeekInMonthField, WEEK_OF_YEAR_FIELD = kWeekOfYearField, WEEK_OF_MONTH_FIELD = kWeekOfMonthField, AM_PM_FIELD = kAmPmField, HOUR1_FIELD = kHour1Field, HOUR0_FIELD = kHour0Field, TIMEZONE_FIELD = kTimezoneField }; enum EStyle { kFull, kLong, kMedium, kShort, kDefault = kMedium, kDateOffset = 4, kNone = -1, kDateTime = 8, FULL = kFull, LONG = kLong, MEDIUM = kMedium, SHORT = kShort, DEFAULT = kDefault, DATE_OFFSET = kDateOffset, NONE = kNone, DATE_TIME = kDateTime }; virtual ~DateFormat(); virtual bool_t operator==(const Format&) const; virtual UnicodeString& format(const Formattable& obj, UnicodeString& toAppendTo, FieldPosition& pos, UErrorCode& status) const; virtual UnicodeString& format( UDate date, UnicodeString& toAppendTo, FieldPosition& fieldPosition) const = 0; UnicodeString& format(UDate date, UnicodeString& result) const; UnicodeString& format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const; virtual UDate parse( const UnicodeString& text, UErrorCode& status) const; virtual UDate parse( const UnicodeString& text, ParsePosition& pos) const = 0; virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const; static DateFormat* createInstance(void); static DateFormat* createTimeInstance(EStyle style = kDefault, const Locale& aLocale = Locale::getDefault()); static DateFormat* createDateInstance(EStyle style = kDefault, const Locale& aLocale = Locale::getDefault()); static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault, EStyle timeStyle = kDefault, const Locale& aLocale = Locale::getDefault()); static const Locale* getAvailableLocales(int32_t& count); virtual bool_t isLenient(void) const; virtual void setLenient(bool_t lenient); virtual const Calendar* getCalendar(void) const; virtual void adoptCalendar(Calendar* calendarToAdopt); virtual void setCalendar(const Calendar& newCalendar); virtual const NumberFormat* getNumberFormat(void) const; virtual void adoptNumberFormat(NumberFormat* formatToAdopt); virtual void setNumberFormat(const NumberFormat& newNumberFormat); virtual const TimeZone& getTimeZone(void) const; virtual void adoptTimeZone(TimeZone* zoneToAdopt); virtual void setTimeZone(const TimeZone& zone); protected: DateFormat(); DateFormat(const DateFormat&); DateFormat& operator=(const DateFormat&); Calendar* fCalendar; NumberFormat* fNumberFormat; private: static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&); static int32_t fgLocalesCount; static const Locale* fgLocales; }; inline UnicodeString& DateFormat::format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const { return Format::format(obj, result, status); } #endif // _DATEFMT //eof