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
00167 kRelative = (1 << 7),
00168
00169 kFullRelative = (kFull | kRelative),
00170
00171 kLongRelative = kLong | kRelative,
00172
00173 kMediumRelative = kMedium | kRelative,
00174
00175 kShortRelative = kShort | kRelative,
00176
00177
00178 kDefault = kMedium,
00179
00180
00181
00186 FULL = kFull,
00187 LONG = kLong,
00188 MEDIUM = kMedium,
00189 SHORT = kShort,
00190 DEFAULT = kDefault,
00191 DATE_OFFSET = kDateOffset,
00192 NONE = kNone,
00193 DATE_TIME = kDateTime
00194 };
00195
00200 virtual ~DateFormat();
00201
00206 virtual UBool operator==(const Format&) const;
00207
00222 virtual UnicodeString& format(const Formattable& obj,
00223 UnicodeString& appendTo,
00224 FieldPosition& pos,
00225 UErrorCode& status) const;
00226
00256 virtual UnicodeString& format( Calendar& cal,
00257 UnicodeString& appendTo,
00258 FieldPosition& fieldPosition) const = 0;
00259
00287 UnicodeString& format( UDate date,
00288 UnicodeString& appendTo,
00289 FieldPosition& fieldPosition) const;
00290
00302 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00303
00314 UnicodeString& format(const Formattable& obj,
00315 UnicodeString& appendTo,
00316 UErrorCode& status) const;
00317
00328 virtual UDate parse( const UnicodeString& text,
00329 UErrorCode& status) const;
00330
00352 virtual void parse( const UnicodeString& text,
00353 Calendar& cal,
00354 ParsePosition& pos) const = 0;
00355
00375 UDate parse( const UnicodeString& text,
00376 ParsePosition& pos) const;
00377
00404 virtual void parseObject(const UnicodeString& source,
00405 Formattable& result,
00406 ParsePosition& parse_pos) const;
00407
00415 static DateFormat* U_EXPORT2 createInstance(void);
00416
00441 static DateFormat* U_EXPORT2 createPatternInstance(
00442 const UnicodeString& skeleton,
00443 const Locale& locale,
00444 DateTimePatternGenerator* dtpng,
00445 UErrorCode& status);
00446
00457 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00458 const Locale& aLocale = Locale::getDefault());
00459
00470 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00471 const Locale& aLocale = Locale::getDefault());
00472
00485 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00486 EStyle timeStyle = kDefault,
00487 const Locale& aLocale = Locale::getDefault());
00488
00496 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00497
00502 virtual UBool isLenient(void) const;
00503
00514 virtual void setLenient(UBool lenient);
00515
00521 virtual const Calendar* getCalendar(void) const;
00522
00532 virtual void adoptCalendar(Calendar* calendarToAdopt);
00533
00541 virtual void setCalendar(const Calendar& newCalendar);
00542
00543
00550 virtual const NumberFormat* getNumberFormat(void) const;
00551
00558 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00559
00565 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00566
00572 virtual const TimeZone& getTimeZone(void) const;
00573
00580 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00581
00587 virtual void setTimeZone(const TimeZone& zone);
00588
00589 protected:
00596 DateFormat();
00597
00602 DateFormat(const DateFormat&);
00603
00608 DateFormat& operator=(const DateFormat&);
00609
00616 Calendar* fCalendar;
00617
00624 NumberFormat* fNumberFormat;
00625
00626 private:
00635 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00636
00637 public:
00643 enum EField
00644 {
00645
00646 kEraField = UDAT_ERA_FIELD,
00647 kYearField = UDAT_YEAR_FIELD,
00648 kMonthField = UDAT_MONTH_FIELD,
00649 kDateField = UDAT_DATE_FIELD,
00650 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00651 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00652 kMinuteField = UDAT_MINUTE_FIELD,
00653 kSecondField = UDAT_SECOND_FIELD,
00654 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00655 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00656 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00657 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00658 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00659 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00660 kAmPmField = UDAT_AM_PM_FIELD,
00661 kHour1Field = UDAT_HOUR1_FIELD,
00662 kHour0Field = UDAT_HOUR0_FIELD,
00663 kTimezoneField = UDAT_TIMEZONE_FIELD,
00664 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00665 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00666 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00667 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00668 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00669
00670
00671 ERA_FIELD = UDAT_ERA_FIELD,
00672 YEAR_FIELD = UDAT_YEAR_FIELD,
00673 MONTH_FIELD = UDAT_MONTH_FIELD,
00674 DATE_FIELD = UDAT_DATE_FIELD,
00675 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00676 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00677 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00678 SECOND_FIELD = UDAT_SECOND_FIELD,
00679 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00680 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00681 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00682 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00683 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00684 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00685 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00686 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00687 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00688 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00689 };
00690 };
00691
00692 inline UnicodeString&
00693 DateFormat::format(const Formattable& obj,
00694 UnicodeString& appendTo,
00695 UErrorCode& status) const {
00696 return Format::format(obj, appendTo, status);
00697 }
00698 U_NAMESPACE_END
00699
00700 #endif
00701
00702 #endif // _DATEFMT
00703