00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef DATEFMT_H
00022 #define DATEFMT_H
00023
00024 #include "unicode/utypes.h"
00025
00026 #if !UCONFIG_NO_FORMATTING
00027
00028 #include "unicode/udat.h"
00029 #include "unicode/calendar.h"
00030 #include "unicode/numfmt.h"
00031 #include "unicode/format.h"
00032 #include "unicode/locid.h"
00033 #include "unicode/enumset.h"
00034 #include "unicode/udisplaycontext.h"
00035
00041 U_NAMESPACE_BEGIN
00042
00043 class TimeZone;
00044 class DateTimePatternGenerator;
00045
00046
00047 #if defined (_MSC_VER)
00048 template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
00049 0,
00050 UDAT_BOOLEAN_ATTRIBUTE_COUNT>;
00051 #endif
00052
00149 class U_I18N_API DateFormat : public Format {
00150 public:
00151
00159 enum EStyle
00160 {
00161 kNone = -1,
00162
00163 kFull = 0,
00164 kLong = 1,
00165 kMedium = 2,
00166 kShort = 3,
00167
00168 kDateOffset = kShort + 1,
00169
00170
00171
00172
00173
00174 kDateTime = 8,
00175
00176
00177 kDateTimeOffset = kDateTime + 1,
00178
00179
00180
00181
00182
00183
00184 kRelative = (1 << 7),
00185
00186 kFullRelative = (kFull | kRelative),
00187
00188 kLongRelative = kLong | kRelative,
00189
00190 kMediumRelative = kMedium | kRelative,
00191
00192 kShortRelative = kShort | kRelative,
00193
00194
00195 kDefault = kMedium,
00196
00197
00198
00203 FULL = kFull,
00204 LONG = kLong,
00205 MEDIUM = kMedium,
00206 SHORT = kShort,
00207 DEFAULT = kDefault,
00208 DATE_OFFSET = kDateOffset,
00209 NONE = kNone,
00210 DATE_TIME = kDateTime
00211 };
00212
00217 virtual ~DateFormat();
00218
00223 virtual UBool operator==(const Format&) const;
00224
00225
00226 using Format::format;
00227
00242 virtual UnicodeString& format(const Formattable& obj,
00243 UnicodeString& appendTo,
00244 FieldPosition& pos,
00245 UErrorCode& status) const;
00246
00262 virtual UnicodeString& format(const Formattable& obj,
00263 UnicodeString& appendTo,
00264 FieldPositionIterator* posIter,
00265 UErrorCode& status) const;
00299 virtual UnicodeString& format( Calendar& cal,
00300 UnicodeString& appendTo,
00301 FieldPosition& fieldPosition) const = 0;
00302
00321 virtual UnicodeString& format(Calendar& cal,
00322 UnicodeString& appendTo,
00323 FieldPositionIterator* posIter,
00324 UErrorCode& status) const;
00352 UnicodeString& format( UDate date,
00353 UnicodeString& appendTo,
00354 FieldPosition& fieldPosition) const;
00355
00369 UnicodeString& format(UDate date,
00370 UnicodeString& appendTo,
00371 FieldPositionIterator* posIter,
00372 UErrorCode& status) const;
00384 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00385
00420 virtual UDate parse( const UnicodeString& text,
00421 UErrorCode& status) const;
00422
00449 virtual void parse( const UnicodeString& text,
00450 Calendar& cal,
00451 ParsePosition& pos) const = 0;
00452
00483 UDate parse( const UnicodeString& text,
00484 ParsePosition& pos) const;
00485
00509 virtual void parseObject(const UnicodeString& source,
00510 Formattable& result,
00511 ParsePosition& parse_pos) const;
00512
00520 static DateFormat* U_EXPORT2 createInstance(void);
00521
00533 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00534 const Locale& aLocale = Locale::getDefault());
00535
00551 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00552 const Locale& aLocale = Locale::getDefault());
00553
00572 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00573 EStyle timeStyle = kDefault,
00574 const Locale& aLocale = Locale::getDefault());
00575
00576 #ifndef U_HIDE_INTERNAL_API
00577
00585 static UnicodeString getBestPattern(
00586 const Locale &locale,
00587 const UnicodeString &skeleton,
00588 UErrorCode &status);
00589 #endif
00590
00604 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00605 const UnicodeString& skeleton,
00606 UErrorCode &status);
00607
00621 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00622 const UnicodeString& skeleton,
00623 const Locale &locale,
00624 UErrorCode &status);
00625
00640 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00641 Calendar *calendarToAdopt,
00642 const UnicodeString& skeleton,
00643 const Locale &locale,
00644 UErrorCode &status);
00645
00646
00654 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00655
00661 virtual UBool isLenient(void) const;
00662
00683 virtual void setLenient(UBool lenient);
00684
00685
00690 virtual UBool isCalendarLenient(void) const;
00691
00692
00702 virtual void setCalendarLenient(UBool lenient);
00703
00704
00713 virtual const Calendar* getCalendar(void) const;
00714
00724 virtual void adoptCalendar(Calendar* calendarToAdopt);
00725
00733 virtual void setCalendar(const Calendar& newCalendar);
00734
00735
00742 virtual const NumberFormat* getNumberFormat(void) const;
00743
00750 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00751
00757 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00758
00764 virtual const TimeZone& getTimeZone(void) const;
00765
00772 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00773
00779 virtual void setTimeZone(const TimeZone& zone);
00780
00790 virtual void setContext(UDisplayContext value, UErrorCode& status);
00791
00802 virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
00803
00815 virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
00816 UBool newvalue,
00817 UErrorCode &status);
00818
00828 virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
00829
00830 protected:
00837 DateFormat();
00838
00843 DateFormat(const DateFormat&);
00844
00849 DateFormat& operator=(const DateFormat&);
00850
00857 Calendar* fCalendar;
00858
00865 NumberFormat* fNumberFormat;
00866
00867
00868 private:
00869
00878 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
00879
00880
00884 EnumSet<UDateFormatBooleanAttribute, 0, UDAT_BOOLEAN_ATTRIBUTE_COUNT> fBoolFlags;
00885
00886
00887 UDisplayContext fCapitalizationContext;
00888 friend class DateFmtKeyByStyle;
00889
00890 public:
00891 #ifndef U_HIDE_OBSOLETE_API
00892
00897 enum EField
00898 {
00899
00900 kEraField = UDAT_ERA_FIELD,
00901 kYearField = UDAT_YEAR_FIELD,
00902 kMonthField = UDAT_MONTH_FIELD,
00903 kDateField = UDAT_DATE_FIELD,
00904 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00905 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00906 kMinuteField = UDAT_MINUTE_FIELD,
00907 kSecondField = UDAT_SECOND_FIELD,
00908 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00909 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00910 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00911 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00912 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00913 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00914 kAmPmField = UDAT_AM_PM_FIELD,
00915 kHour1Field = UDAT_HOUR1_FIELD,
00916 kHour0Field = UDAT_HOUR0_FIELD,
00917 kTimezoneField = UDAT_TIMEZONE_FIELD,
00918 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00919 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00920 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00921 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00922 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00923
00924
00925 ERA_FIELD = UDAT_ERA_FIELD,
00926 YEAR_FIELD = UDAT_YEAR_FIELD,
00927 MONTH_FIELD = UDAT_MONTH_FIELD,
00928 DATE_FIELD = UDAT_DATE_FIELD,
00929 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00930 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00931 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00932 SECOND_FIELD = UDAT_SECOND_FIELD,
00933 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00934 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00935 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00936 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00937 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00938 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00939 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00940 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00941 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00942 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00943 };
00944 #endif
00945 };
00946
00947 U_NAMESPACE_END
00948
00949 #endif
00950
00951 #endif // _DATEFMT
00952