ICU 73.2  73.2
datefmt.h
Go to the documentation of this file.
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