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 #include "unicode/enumset.h"
00032 #include "unicode/udisplaycontext.h"
00033
00039 U_NAMESPACE_BEGIN
00040
00041 class TimeZone;
00042 class DateTimePatternGenerator;
00043
00044
00045 #if defined (_MSC_VER)
00046 template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
00047 0,
00048 UDAT_BOOLEAN_ATTRIBUTE_COUNT>;
00049 #endif
00050
00147 class U_I18N_API DateFormat : public Format {
00148 public:
00149
00157 enum EStyle
00158 {
00159 kNone = -1,
00160
00161 kFull = 0,
00162 kLong = 1,
00163 kMedium = 2,
00164 kShort = 3,
00165
00166 kDateOffset = kShort + 1,
00167
00168
00169
00170
00171
00172 kDateTime = 8,
00173
00174
00175 kDateTimeOffset = kDateTime + 1,
00176
00177
00178
00179
00180
00181
00182 kRelative = (1 << 7),
00183
00184 kFullRelative = (kFull | kRelative),
00185
00186 kLongRelative = kLong | kRelative,
00187
00188 kMediumRelative = kMedium | kRelative,
00189
00190 kShortRelative = kShort | kRelative,
00191
00192
00193 kDefault = kMedium,
00194
00195
00196
00201 FULL = kFull,
00202 LONG = kLong,
00203 MEDIUM = kMedium,
00204 SHORT = kShort,
00205 DEFAULT = kDefault,
00206 DATE_OFFSET = kDateOffset,
00207 NONE = kNone,
00208 DATE_TIME = kDateTime
00209 };
00210
00215 virtual ~DateFormat();
00216
00221 virtual UBool operator==(const Format&) const;
00222
00223
00224 using Format::format;
00225
00240 virtual UnicodeString& format(const Formattable& obj,
00241 UnicodeString& appendTo,
00242 FieldPosition& pos,
00243 UErrorCode& status) const;
00244
00260 virtual UnicodeString& format(const Formattable& obj,
00261 UnicodeString& appendTo,
00262 FieldPositionIterator* posIter,
00263 UErrorCode& status) const;
00297 virtual UnicodeString& format( Calendar& cal,
00298 UnicodeString& appendTo,
00299 FieldPosition& fieldPosition) const = 0;
00300
00319 virtual UnicodeString& format(Calendar& cal,
00320 UnicodeString& appendTo,
00321 FieldPositionIterator* posIter,
00322 UErrorCode& status) const;
00350 UnicodeString& format( UDate date,
00351 UnicodeString& appendTo,
00352 FieldPosition& fieldPosition) const;
00353
00367 UnicodeString& format(UDate date,
00368 UnicodeString& appendTo,
00369 FieldPositionIterator* posIter,
00370 UErrorCode& status) const;
00382 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00383
00418 virtual UDate parse( const UnicodeString& text,
00419 UErrorCode& status) const;
00420
00447 virtual void parse( const UnicodeString& text,
00448 Calendar& cal,
00449 ParsePosition& pos) const = 0;
00450
00481 UDate parse( const UnicodeString& text,
00482 ParsePosition& pos) const;
00483
00507 virtual void parseObject(const UnicodeString& source,
00508 Formattable& result,
00509 ParsePosition& parse_pos) const;
00510
00518 static DateFormat* U_EXPORT2 createInstance(void);
00519
00531 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00532 const Locale& aLocale = Locale::getDefault());
00533
00549 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00550 const Locale& aLocale = Locale::getDefault());
00551
00570 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00571 EStyle timeStyle = kDefault,
00572 const Locale& aLocale = Locale::getDefault());
00573
00574 #ifndef U_HIDE_INTERNAL_API
00575
00583 static UnicodeString getBestPattern(
00584 const Locale &locale,
00585 const UnicodeString &skeleton,
00586 UErrorCode &status);
00587 #endif
00588
00602 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00603 const UnicodeString& skeleton,
00604 UErrorCode &status);
00605
00619 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00620 const UnicodeString& skeleton,
00621 const Locale &locale,
00622 UErrorCode &status);
00623
00638 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00639 Calendar *calendarToAdopt,
00640 const UnicodeString& skeleton,
00641 const Locale &locale,
00642 UErrorCode &status);
00643
00644
00652 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00653
00659 virtual UBool isLenient(void) const;
00660
00681 virtual void setLenient(UBool lenient);
00682
00683
00688 virtual UBool isCalendarLenient(void) const;
00689
00690
00700 virtual void setCalendarLenient(UBool lenient);
00701
00702
00711 virtual const Calendar* getCalendar(void) const;
00712
00722 virtual void adoptCalendar(Calendar* calendarToAdopt);
00723
00731 virtual void setCalendar(const Calendar& newCalendar);
00732
00733
00740 virtual const NumberFormat* getNumberFormat(void) const;
00741
00748 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00749
00755 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00756
00762 virtual const TimeZone& getTimeZone(void) const;
00763
00770 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00771
00777 virtual void setTimeZone(const TimeZone& zone);
00778
00788 virtual void setContext(UDisplayContext value, UErrorCode& status);
00789
00800 virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
00801
00813 virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
00814 UBool newvalue,
00815 UErrorCode &status);
00816
00826 virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
00827
00828 protected:
00835 DateFormat();
00836
00841 DateFormat(const DateFormat&);
00842
00847 DateFormat& operator=(const DateFormat&);
00848
00855 Calendar* fCalendar;
00856
00863 NumberFormat* fNumberFormat;
00864
00865
00866 private:
00867
00876 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
00877
00878
00882 EnumSet<UDateFormatBooleanAttribute, 0, UDAT_BOOLEAN_ATTRIBUTE_COUNT> fBoolFlags;
00883
00884
00885 UDisplayContext fCapitalizationContext;
00886 friend class DateFmtKeyByStyle;
00887
00888 public:
00889 #ifndef U_HIDE_OBSOLETE_API
00890
00895 enum EField
00896 {
00897
00898 kEraField = UDAT_ERA_FIELD,
00899 kYearField = UDAT_YEAR_FIELD,
00900 kMonthField = UDAT_MONTH_FIELD,
00901 kDateField = UDAT_DATE_FIELD,
00902 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00903 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00904 kMinuteField = UDAT_MINUTE_FIELD,
00905 kSecondField = UDAT_SECOND_FIELD,
00906 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00907 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00908 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00909 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00910 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00911 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00912 kAmPmField = UDAT_AM_PM_FIELD,
00913 kHour1Field = UDAT_HOUR1_FIELD,
00914 kHour0Field = UDAT_HOUR0_FIELD,
00915 kTimezoneField = UDAT_TIMEZONE_FIELD,
00916 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00917 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00918 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00919 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00920 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00921
00922
00923 ERA_FIELD = UDAT_ERA_FIELD,
00924 YEAR_FIELD = UDAT_YEAR_FIELD,
00925 MONTH_FIELD = UDAT_MONTH_FIELD,
00926 DATE_FIELD = UDAT_DATE_FIELD,
00927 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00928 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00929 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00930 SECOND_FIELD = UDAT_SECOND_FIELD,
00931 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00932 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00933 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00934 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00935 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00936 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00937 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00938 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00939 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00940 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00941 };
00942 #endif
00943 };
00944
00945 U_NAMESPACE_END
00946
00947 #endif
00948
00949 #endif // _DATEFMT
00950