|
ICU 73.2
73.2
|
00001 // © 2016 and later: Unicode, Inc. and others. 00002 // License & terms of use: http://www.unicode.org/copyright.html 00003 /* 00004 ******************************************************************************** 00005 * Copyright (C) 1997-2016, International Business Machines 00006 * Corporation and others. All Rights Reserved. 00007 ******************************************************************************** 00008 * 00009 * File DATEFMT.H 00010 * 00011 * Modification History: 00012 * 00013 * Date Name Description 00014 * 02/19/97 aliu Converted from java. 00015 * 04/01/97 aliu Added support for centuries. 00016 * 07/23/98 stephen JDK 1.2 sync 00017 * 11/15/99 weiv Added support for week of year/day of week formatting 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 // kFull + kDateOffset = 4 00177 // kLong + kDateOffset = 5 00178 // kMedium + kDateOffset = 6 00179 // kShort + kDateOffset = 7 00180 00181 kDateTime = 8, 00182 // Default DateTime 00183 00184 kDateTimeOffset = kDateTime + 1, 00185 // kFull + kDateTimeOffset = 9 00186 // kLong + kDateTimeOffset = 10 00187 // kMedium + kDateTimeOffset = 11 00188 // kShort + kDateTimeOffset = 12 00189 00190 // relative dates 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 override = 0; 00233 00238 virtual bool operator==(const Format&) const override; 00239 00240 00241 using Format::format; 00242 00257 virtual UnicodeString& format(const Formattable& obj, 00258 UnicodeString& appendTo, 00259 FieldPosition& pos, 00260 UErrorCode& status) const override; 00261 00277 virtual UnicodeString& format(const Formattable& obj, 00278 UnicodeString& appendTo, 00279 FieldPositionIterator* posIter, 00280 UErrorCode& status) const override; 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 override; 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 /* U_HIDE_INTERNAL_API */ 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 // Obsolete; use UDateFormatField instead 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 // Obsolete; use UDateFormatField instead 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 /* U_HIDE_OBSOLETE_API */ 00960 }; 00961 00962 U_NAMESPACE_END 00963 00964 #endif /* #if !UCONFIG_NO_FORMATTING */ 00965 00966 #endif /* U_SHOW_CPLUSPLUS_API */ 00967 00968 #endif // _DATEFMT 00969 //eof
1.7.6.1