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 U_SHOW_CPLUSPLUS_API
00027
00028 #if !UCONFIG_NO_FORMATTING
00029
00030 #include "unicode/udat.h"
00031 #include "unicode/calendar.h"
00032 #include "unicode/numfmt.h"
00033 #include "unicode/format.h"
00034 #include "unicode/locid.h"
00035 #include "unicode/enumset.h"
00036 #include "unicode/udisplaycontext.h"
00037
00043 U_NAMESPACE_BEGIN
00044
00045 class TimeZone;
00046 class DateTimePatternGenerator;
00047
00053 #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN && !defined(U_IN_DOXYGEN)
00054 template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
00055 0,
00056 UDAT_BOOLEAN_ATTRIBUTE_COUNT>;
00057 #endif
00058
00156 class U_I18N_API DateFormat : public Format {
00157 public:
00158
00166 enum EStyle
00167 {
00168 kNone = -1,
00169
00170 kFull = 0,
00171 kLong = 1,
00172 kMedium = 2,
00173 kShort = 3,
00174
00175 kDateOffset = kShort + 1,
00176
00177
00178
00179
00180
00181 kDateTime = 8,
00182
00183
00184 kDateTimeOffset = kDateTime + 1,
00185
00186
00187
00188
00189
00190
00191 kRelative = (1 << 7),
00192
00193 kFullRelative = (kFull | kRelative),
00194
00195 kLongRelative = kLong | kRelative,
00196
00197 kMediumRelative = kMedium | kRelative,
00198
00199 kShortRelative = kShort | kRelative,
00200
00201
00202 kDefault = kMedium,
00203
00204
00205
00210 FULL = kFull,
00211 LONG = kLong,
00212 MEDIUM = kMedium,
00213 SHORT = kShort,
00214 DEFAULT = kDefault,
00215 DATE_OFFSET = kDateOffset,
00216 NONE = kNone,
00217 DATE_TIME = kDateTime
00218 };
00219
00224 virtual ~DateFormat();
00225
00232 virtual DateFormat* clone() const = 0;
00233
00238 virtual UBool operator==(const Format&) const;
00239
00240
00241 using Format::format;
00242
00257 virtual UnicodeString& format(const Formattable& obj,
00258 UnicodeString& appendTo,
00259 FieldPosition& pos,
00260 UErrorCode& status) const;
00261
00277 virtual UnicodeString& format(const Formattable& obj,
00278 UnicodeString& appendTo,
00279 FieldPositionIterator* posIter,
00280 UErrorCode& status) const;
00314 virtual UnicodeString& format( Calendar& cal,
00315 UnicodeString& appendTo,
00316 FieldPosition& fieldPosition) const = 0;
00317
00336 virtual UnicodeString& format(Calendar& cal,
00337 UnicodeString& appendTo,
00338 FieldPositionIterator* posIter,
00339 UErrorCode& status) const;
00367 UnicodeString& format( UDate date,
00368 UnicodeString& appendTo,
00369 FieldPosition& fieldPosition) const;
00370
00384 UnicodeString& format(UDate date,
00385 UnicodeString& appendTo,
00386 FieldPositionIterator* posIter,
00387 UErrorCode& status) const;
00399 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00400
00435 virtual UDate parse( const UnicodeString& text,
00436 UErrorCode& status) const;
00437
00464 virtual void parse( const UnicodeString& text,
00465 Calendar& cal,
00466 ParsePosition& pos) const = 0;
00467
00498 UDate parse( const UnicodeString& text,
00499 ParsePosition& pos) const;
00500
00524 virtual void parseObject(const UnicodeString& source,
00525 Formattable& result,
00526 ParsePosition& parse_pos) const;
00527
00535 static DateFormat* U_EXPORT2 createInstance(void);
00536
00548 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00549 const Locale& aLocale = Locale::getDefault());
00550
00566 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00567 const Locale& aLocale = Locale::getDefault());
00568
00587 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00588 EStyle timeStyle = kDefault,
00589 const Locale& aLocale = Locale::getDefault());
00590
00591 #ifndef U_HIDE_INTERNAL_API
00592
00600 static UnicodeString getBestPattern(
00601 const Locale &locale,
00602 const UnicodeString &skeleton,
00603 UErrorCode &status);
00604 #endif
00605
00619 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00620 const UnicodeString& skeleton,
00621 UErrorCode &status);
00622
00636 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00637 const UnicodeString& skeleton,
00638 const Locale &locale,
00639 UErrorCode &status);
00640
00655 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00656 Calendar *calendarToAdopt,
00657 const UnicodeString& skeleton,
00658 const Locale &locale,
00659 UErrorCode &status);
00660
00661
00669 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00670
00676 virtual UBool isLenient(void) const;
00677
00698 virtual void setLenient(UBool lenient);
00699
00700
00705 virtual UBool isCalendarLenient(void) const;
00706
00707
00717 virtual void setCalendarLenient(UBool lenient);
00718
00719
00728 virtual const Calendar* getCalendar(void) const;
00729
00739 virtual void adoptCalendar(Calendar* calendarToAdopt);
00740
00748 virtual void setCalendar(const Calendar& newCalendar);
00749
00750
00757 virtual const NumberFormat* getNumberFormat(void) const;
00758
00765 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00766
00772 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00773
00779 virtual const TimeZone& getTimeZone(void) const;
00780
00787 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00788
00794 virtual void setTimeZone(const TimeZone& zone);
00795
00805 virtual void setContext(UDisplayContext value, UErrorCode& status);
00806
00817 virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
00818
00830 virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
00831 UBool newvalue,
00832 UErrorCode &status);
00833
00843 virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
00844
00845 protected:
00852 DateFormat();
00853
00858 DateFormat(const DateFormat&);
00859
00864 DateFormat& operator=(const DateFormat&);
00865
00872 Calendar* fCalendar;
00873
00880 NumberFormat* fNumberFormat;
00881
00882
00883 private:
00884
00893 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
00894
00895
00899 EnumSet<UDateFormatBooleanAttribute, 0, UDAT_BOOLEAN_ATTRIBUTE_COUNT> fBoolFlags;
00900
00901
00902 UDisplayContext fCapitalizationContext;
00903 friend class DateFmtKeyByStyle;
00904
00905 public:
00906 #ifndef U_HIDE_OBSOLETE_API
00907
00912 enum EField
00913 {
00914
00915 kEraField = UDAT_ERA_FIELD,
00916 kYearField = UDAT_YEAR_FIELD,
00917 kMonthField = UDAT_MONTH_FIELD,
00918 kDateField = UDAT_DATE_FIELD,
00919 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00920 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00921 kMinuteField = UDAT_MINUTE_FIELD,
00922 kSecondField = UDAT_SECOND_FIELD,
00923 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00924 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00925 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00926 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00927 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00928 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00929 kAmPmField = UDAT_AM_PM_FIELD,
00930 kHour1Field = UDAT_HOUR1_FIELD,
00931 kHour0Field = UDAT_HOUR0_FIELD,
00932 kTimezoneField = UDAT_TIMEZONE_FIELD,
00933 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00934 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00935 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00936 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00937 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00938
00939
00940 ERA_FIELD = UDAT_ERA_FIELD,
00941 YEAR_FIELD = UDAT_YEAR_FIELD,
00942 MONTH_FIELD = UDAT_MONTH_FIELD,
00943 DATE_FIELD = UDAT_DATE_FIELD,
00944 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00945 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00946 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00947 SECOND_FIELD = UDAT_SECOND_FIELD,
00948 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00949 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00950 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00951 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00952 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00953 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00954 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00955 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00956 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00957 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00958 };
00959 #endif
00960 };
00961
00962 U_NAMESPACE_END
00963
00964 #endif
00965
00966 #endif
00967
00968 #endif // _DATEFMT
00969