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
00032 U_NAMESPACE_BEGIN
00033
00034 class TimeZone;
00035
00132 class U_I18N_API DateFormat : public Format {
00133 public:
00134
00142 enum EStyle
00143 {
00144 kNone = -1,
00145
00146 kFull = 0,
00147 kLong = 1,
00148 kMedium = 2,
00149 kShort = 3,
00150
00151 kDateOffset = kShort + 1,
00152
00153
00154
00155
00156
00157 kDateTime = 8,
00158
00159 kDefault = kMedium,
00160
00161
00162
00167 FULL = kFull,
00168 LONG = kLong,
00169 MEDIUM = kMedium,
00170 SHORT = kShort,
00171 DEFAULT = kDefault,
00172 DATE_OFFSET = kDateOffset,
00173 NONE = kNone,
00174 DATE_TIME = kDateTime
00175 };
00176
00181 virtual ~DateFormat();
00182
00187 virtual UBool operator==(const Format&) const;
00188
00203 virtual UnicodeString& format(const Formattable& obj,
00204 UnicodeString& appendTo,
00205 FieldPosition& pos,
00206 UErrorCode& status) const;
00207
00237 virtual UnicodeString& format( Calendar& cal,
00238 UnicodeString& appendTo,
00239 FieldPosition& fieldPosition) const = 0;
00240
00268 UnicodeString& format( UDate date,
00269 UnicodeString& appendTo,
00270 FieldPosition& fieldPosition) const;
00271
00283 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00284
00295 UnicodeString& format(const Formattable& obj,
00296 UnicodeString& appendTo,
00297 UErrorCode& status) const;
00298
00309 virtual UDate parse( const UnicodeString& text,
00310 UErrorCode& status) const;
00311
00333 virtual void parse( const UnicodeString& text,
00334 Calendar& cal,
00335 ParsePosition& pos) const = 0;
00336
00356 UDate parse( const UnicodeString& text,
00357 ParsePosition& pos) const;
00358
00385 virtual void parseObject(const UnicodeString& source,
00386 Formattable& result,
00387 ParsePosition& parse_pos) const;
00388
00396 static DateFormat* U_EXPORT2 createInstance(void);
00397
00408 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00409 const Locale& aLocale = Locale::getDefault());
00410
00421 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00422 const Locale& aLocale = Locale::getDefault());
00423
00436 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00437 EStyle timeStyle = kDefault,
00438 const Locale& aLocale = Locale::getDefault());
00439
00447 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00448
00453 virtual UBool isLenient(void) const;
00454
00465 virtual void setLenient(UBool lenient);
00466
00472 virtual const Calendar* getCalendar(void) const;
00473
00483 virtual void adoptCalendar(Calendar* calendarToAdopt);
00484
00492 virtual void setCalendar(const Calendar& newCalendar);
00493
00494
00501 virtual const NumberFormat* getNumberFormat(void) const;
00502
00509 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00510
00516 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00517
00523 virtual const TimeZone& getTimeZone(void) const;
00524
00531 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00532
00538 virtual void setTimeZone(const TimeZone& zone);
00539
00540 protected:
00547 DateFormat();
00548
00553 DateFormat(const DateFormat&);
00554
00559 DateFormat& operator=(const DateFormat&);
00560
00567 Calendar* fCalendar;
00568
00575 NumberFormat* fNumberFormat;
00576
00577 private:
00586 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00587
00588 public:
00594 enum EField
00595 {
00596
00597 kEraField = UDAT_ERA_FIELD,
00598 kYearField = UDAT_YEAR_FIELD,
00599 kMonthField = UDAT_MONTH_FIELD,
00600 kDateField = UDAT_DATE_FIELD,
00601 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00602 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00603 kMinuteField = UDAT_MINUTE_FIELD,
00604 kSecondField = UDAT_SECOND_FIELD,
00605 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00606 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00607 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00608 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00609 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00610 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00611 kAmPmField = UDAT_AM_PM_FIELD,
00612 kHour1Field = UDAT_HOUR1_FIELD,
00613 kHour0Field = UDAT_HOUR0_FIELD,
00614 kTimezoneField = UDAT_TIMEZONE_FIELD,
00615 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00616 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00617 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00618 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00619 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00620
00621
00622 ERA_FIELD = UDAT_ERA_FIELD,
00623 YEAR_FIELD = UDAT_YEAR_FIELD,
00624 MONTH_FIELD = UDAT_MONTH_FIELD,
00625 DATE_FIELD = UDAT_DATE_FIELD,
00626 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00627 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00628 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00629 SECOND_FIELD = UDAT_SECOND_FIELD,
00630 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00631 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00632 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00633 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00634 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00635 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00636 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00637 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00638 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00639 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00640 };
00641 };
00642
00643 inline UnicodeString&
00644 DateFormat::format(const Formattable& obj,
00645 UnicodeString& appendTo,
00646 UErrorCode& status) const {
00647 return Format::format(obj, appendTo, status);
00648 }
00649 U_NAMESPACE_END
00650
00651 #endif
00652
00653 #endif // _DATEFMT
00654