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
00051 #if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN && !defined(U_IN_DOXYGEN)
00052 template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
00053 0,
00054 UDAT_BOOLEAN_ATTRIBUTE_COUNT>;
00055 #endif
00056
00154 class U_I18N_API DateFormat : public Format {
00155 public:
00156
00164 enum EStyle
00165 {
00166 kNone = -1,
00167
00168 kFull = 0,
00169 kLong = 1,
00170 kMedium = 2,
00171 kShort = 3,
00172
00173 kDateOffset = kShort + 1,
00174
00175
00176
00177
00178
00179 kDateTime = 8,
00180
00181
00182 kDateTimeOffset = kDateTime + 1,
00183
00184
00185
00186
00187
00188
00189 kRelative = (1 << 7),
00190
00191 kFullRelative = (kFull | kRelative),
00192
00193 kLongRelative = kLong | kRelative,
00194
00195 kMediumRelative = kMedium | kRelative,
00196
00197 kShortRelative = kShort | kRelative,
00198
00199
00200 kDefault = kMedium,
00201
00202
00203
00208 FULL = kFull,
00209 LONG = kLong,
00210 MEDIUM = kMedium,
00211 SHORT = kShort,
00212 DEFAULT = kDefault,
00213 DATE_OFFSET = kDateOffset,
00214 NONE = kNone,
00215 DATE_TIME = kDateTime
00216 };
00217
00222 virtual ~DateFormat();
00223
00228 virtual UBool operator==(const Format&) const;
00229
00230
00231 using Format::format;
00232
00247 virtual UnicodeString& format(const Formattable& obj,
00248 UnicodeString& appendTo,
00249 FieldPosition& pos,
00250 UErrorCode& status) const;
00251
00267 virtual UnicodeString& format(const Formattable& obj,
00268 UnicodeString& appendTo,
00269 FieldPositionIterator* posIter,
00270 UErrorCode& status) const;
00304 virtual UnicodeString& format( Calendar& cal,
00305 UnicodeString& appendTo,
00306 FieldPosition& fieldPosition) const = 0;
00307
00326 virtual UnicodeString& format(Calendar& cal,
00327 UnicodeString& appendTo,
00328 FieldPositionIterator* posIter,
00329 UErrorCode& status) const;
00357 UnicodeString& format( UDate date,
00358 UnicodeString& appendTo,
00359 FieldPosition& fieldPosition) const;
00360
00374 UnicodeString& format(UDate date,
00375 UnicodeString& appendTo,
00376 FieldPositionIterator* posIter,
00377 UErrorCode& status) const;
00389 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00390
00425 virtual UDate parse( const UnicodeString& text,
00426 UErrorCode& status) const;
00427
00454 virtual void parse( const UnicodeString& text,
00455 Calendar& cal,
00456 ParsePosition& pos) const = 0;
00457
00488 UDate parse( const UnicodeString& text,
00489 ParsePosition& pos) const;
00490
00514 virtual void parseObject(const UnicodeString& source,
00515 Formattable& result,
00516 ParsePosition& parse_pos) const;
00517
00525 static DateFormat* U_EXPORT2 createInstance(void);
00526
00538 static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00539 const Locale& aLocale = Locale::getDefault());
00540
00556 static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00557 const Locale& aLocale = Locale::getDefault());
00558
00577 static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00578 EStyle timeStyle = kDefault,
00579 const Locale& aLocale = Locale::getDefault());
00580
00581 #ifndef U_HIDE_INTERNAL_API
00582
00590 static UnicodeString getBestPattern(
00591 const Locale &locale,
00592 const UnicodeString &skeleton,
00593 UErrorCode &status);
00594 #endif
00595
00609 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00610 const UnicodeString& skeleton,
00611 UErrorCode &status);
00612
00626 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00627 const UnicodeString& skeleton,
00628 const Locale &locale,
00629 UErrorCode &status);
00630
00645 static DateFormat* U_EXPORT2 createInstanceForSkeleton(
00646 Calendar *calendarToAdopt,
00647 const UnicodeString& skeleton,
00648 const Locale &locale,
00649 UErrorCode &status);
00650
00651
00659 static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00660
00666 virtual UBool isLenient(void) const;
00667
00688 virtual void setLenient(UBool lenient);
00689
00690
00695 virtual UBool isCalendarLenient(void) const;
00696
00697
00707 virtual void setCalendarLenient(UBool lenient);
00708
00709
00718 virtual const Calendar* getCalendar(void) const;
00719
00729 virtual void adoptCalendar(Calendar* calendarToAdopt);
00730
00738 virtual void setCalendar(const Calendar& newCalendar);
00739
00740
00747 virtual const NumberFormat* getNumberFormat(void) const;
00748
00755 virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00756
00762 virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00763
00769 virtual const TimeZone& getTimeZone(void) const;
00770
00777 virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00778
00784 virtual void setTimeZone(const TimeZone& zone);
00785
00795 virtual void setContext(UDisplayContext value, UErrorCode& status);
00796
00807 virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
00808
00820 virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
00821 UBool newvalue,
00822 UErrorCode &status);
00823
00833 virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
00834
00835 protected:
00842 DateFormat();
00843
00848 DateFormat(const DateFormat&);
00849
00854 DateFormat& operator=(const DateFormat&);
00855
00862 Calendar* fCalendar;
00863
00870 NumberFormat* fNumberFormat;
00871
00872
00873 private:
00874
00883 static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
00884
00885
00889 EnumSet<UDateFormatBooleanAttribute, 0, UDAT_BOOLEAN_ATTRIBUTE_COUNT> fBoolFlags;
00890
00891
00892 UDisplayContext fCapitalizationContext;
00893 friend class DateFmtKeyByStyle;
00894
00895 public:
00896 #ifndef U_HIDE_OBSOLETE_API
00897
00902 enum EField
00903 {
00904
00905 kEraField = UDAT_ERA_FIELD,
00906 kYearField = UDAT_YEAR_FIELD,
00907 kMonthField = UDAT_MONTH_FIELD,
00908 kDateField = UDAT_DATE_FIELD,
00909 kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00910 kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00911 kMinuteField = UDAT_MINUTE_FIELD,
00912 kSecondField = UDAT_SECOND_FIELD,
00913 kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00914 kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00915 kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00916 kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00917 kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00918 kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00919 kAmPmField = UDAT_AM_PM_FIELD,
00920 kHour1Field = UDAT_HOUR1_FIELD,
00921 kHour0Field = UDAT_HOUR0_FIELD,
00922 kTimezoneField = UDAT_TIMEZONE_FIELD,
00923 kYearWOYField = UDAT_YEAR_WOY_FIELD,
00924 kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00925 kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00926 kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00927 kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00928
00929
00930 ERA_FIELD = UDAT_ERA_FIELD,
00931 YEAR_FIELD = UDAT_YEAR_FIELD,
00932 MONTH_FIELD = UDAT_MONTH_FIELD,
00933 DATE_FIELD = UDAT_DATE_FIELD,
00934 HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00935 HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00936 MINUTE_FIELD = UDAT_MINUTE_FIELD,
00937 SECOND_FIELD = UDAT_SECOND_FIELD,
00938 MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00939 DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00940 DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00941 DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00942 WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00943 WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00944 AM_PM_FIELD = UDAT_AM_PM_FIELD,
00945 HOUR1_FIELD = UDAT_HOUR1_FIELD,
00946 HOUR0_FIELD = UDAT_HOUR0_FIELD,
00947 TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00948 };
00949 #endif
00950 };
00951
00952 U_NAMESPACE_END
00953
00954 #endif
00955
00956 #endif // _DATEFMT
00957