datefmt.h

Go to the documentation of this file.
00001 /*
00002  ********************************************************************************
00003  *   Copyright (C) 1997-2012, International Business Machines
00004  *   Corporation and others.  All Rights Reserved.
00005  ********************************************************************************
00006  *
00007  * File DATEFMT.H
00008  *
00009  * Modification History:
00010  *
00011  *   Date        Name        Description
00012  *   02/19/97    aliu        Converted from java.
00013  *   04/01/97    aliu        Added support for centuries.
00014  *   07/23/98    stephen     JDK 1.2 sync
00015  *   11/15/99    weiv        Added support for week of year/day of week formatting
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 
00037 U_NAMESPACE_BEGIN
00038 
00039 class TimeZone;
00040 class DateTimePatternGenerator;
00041 
00138 class U_I18N_API DateFormat : public Format {
00139 public:
00140 
00148     enum EStyle
00149     {
00150         kNone   = -1,
00151 
00152         kFull   = 0,
00153         kLong   = 1,
00154         kMedium = 2,
00155         kShort  = 3,
00156 
00157         kDateOffset   = kShort + 1,
00158      // kFull   + kDateOffset = 4
00159      // kLong   + kDateOffset = 5
00160      // kMedium + kDateOffset = 6
00161      // kShort  + kDateOffset = 7
00162 
00163         kDateTime             = 8,
00164      // Default DateTime
00165 
00166         kDateTimeOffset = kDateTime + 1,
00167      // kFull   + kDateTimeOffset = 9
00168      // kLong   + kDateTimeOffset = 10
00169      // kMedium + kDateTimeOffset = 11
00170      // kShort  + kDateTimeOffset = 12
00171 
00172         // relative dates
00173         kRelative = (1 << 7),
00174 
00175         kFullRelative = (kFull | kRelative),
00176 
00177         kLongRelative = kLong | kRelative,
00178 
00179         kMediumRelative = kMedium | kRelative,
00180 
00181         kShortRelative = kShort | kRelative,
00182 
00183 
00184         kDefault      = kMedium,
00185 
00186 
00187 
00192         FULL        = kFull,
00193         LONG        = kLong,
00194         MEDIUM        = kMedium,
00195         SHORT        = kShort,
00196         DEFAULT        = kDefault,
00197         DATE_OFFSET    = kDateOffset,
00198         NONE        = kNone,
00199         DATE_TIME    = kDateTime
00200     };
00201 
00206     virtual ~DateFormat();
00207 
00212     virtual UBool operator==(const Format&) const;
00213 
00214 
00215     using Format::format;
00216 
00231     virtual UnicodeString& format(const Formattable& obj,
00232                                   UnicodeString& appendTo,
00233                                   FieldPosition& pos,
00234                                   UErrorCode& status) const;
00235 
00251     virtual UnicodeString& format(const Formattable& obj,
00252                                   UnicodeString& appendTo,
00253                                   FieldPositionIterator* posIter,
00254                                   UErrorCode& status) const;
00288     virtual UnicodeString& format(  Calendar& cal,
00289                                     UnicodeString& appendTo,
00290                                     FieldPosition& fieldPosition) const = 0;
00291 
00310     virtual UnicodeString& format(Calendar& cal,
00311                                   UnicodeString& appendTo,
00312                                   FieldPositionIterator* posIter,
00313                                   UErrorCode& status) const;
00341     UnicodeString& format(  UDate date,
00342                             UnicodeString& appendTo,
00343                             FieldPosition& fieldPosition) const;
00344 
00358     UnicodeString& format(UDate date,
00359                           UnicodeString& appendTo,
00360                           FieldPositionIterator* posIter,
00361                           UErrorCode& status) const;
00373     UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00374 
00385     UnicodeString& format(const Formattable& obj,
00386                           UnicodeString& appendTo,
00387                           UErrorCode& status) const;
00388 
00423     virtual UDate parse( const UnicodeString& text,
00424                         UErrorCode& status) const;
00425 
00452     virtual void parse( const UnicodeString& text,
00453                         Calendar& cal,
00454                         ParsePosition& pos) const = 0;
00455 
00486     UDate parse( const UnicodeString& text,
00487                  ParsePosition& pos) const;
00488 
00512     virtual void parseObject(const UnicodeString& source,
00513                              Formattable& result,
00514                              ParsePosition& parse_pos) const;
00515 
00523     static DateFormat* U_EXPORT2 createInstance(void);
00524 
00536     static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00537                                           const Locale& aLocale = Locale::getDefault());
00538 
00554     static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00555                                           const Locale& aLocale = Locale::getDefault());
00556 
00575     static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00576                                               EStyle timeStyle = kDefault,
00577                                               const Locale& aLocale = Locale::getDefault());
00578 
00586     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00587 
00592     virtual UBool isLenient(void) const;
00593 
00604     virtual void setLenient(UBool lenient);
00605 
00611     virtual const Calendar* getCalendar(void) const;
00612 
00622     virtual void adoptCalendar(Calendar* calendarToAdopt);
00623 
00631     virtual void setCalendar(const Calendar& newCalendar);
00632 
00633 
00640     virtual const NumberFormat* getNumberFormat(void) const;
00641 
00648     virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00649 
00655     virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00656 
00662     virtual const TimeZone& getTimeZone(void) const;
00663 
00670     virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00671 
00677     virtual void setTimeZone(const TimeZone& zone);
00678 
00679 protected:
00686     DateFormat();
00687 
00692     DateFormat(const DateFormat&);
00693 
00698     DateFormat& operator=(const DateFormat&);
00699 
00706     Calendar* fCalendar;
00707 
00714     NumberFormat* fNumberFormat;
00715 
00716 private:
00725     static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
00726 
00727 public:
00728 #ifndef U_HIDE_OBSOLETE_API
00729 
00734     enum EField
00735     {
00736         // Obsolete; use UDateFormatField instead
00737         kEraField = UDAT_ERA_FIELD,
00738         kYearField = UDAT_YEAR_FIELD,
00739         kMonthField = UDAT_MONTH_FIELD,
00740         kDateField = UDAT_DATE_FIELD,
00741         kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00742         kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00743         kMinuteField = UDAT_MINUTE_FIELD,
00744         kSecondField = UDAT_SECOND_FIELD,
00745         kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00746         kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00747         kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00748         kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00749         kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00750         kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00751         kAmPmField = UDAT_AM_PM_FIELD,
00752         kHour1Field = UDAT_HOUR1_FIELD,
00753         kHour0Field = UDAT_HOUR0_FIELD,
00754         kTimezoneField = UDAT_TIMEZONE_FIELD,
00755         kYearWOYField = UDAT_YEAR_WOY_FIELD,
00756         kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00757         kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00758         kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00759         kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00760 
00761         // Obsolete; use UDateFormatField instead
00762         ERA_FIELD = UDAT_ERA_FIELD,
00763         YEAR_FIELD = UDAT_YEAR_FIELD,
00764         MONTH_FIELD = UDAT_MONTH_FIELD,
00765         DATE_FIELD = UDAT_DATE_FIELD,
00766         HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00767         HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00768         MINUTE_FIELD = UDAT_MINUTE_FIELD,
00769         SECOND_FIELD = UDAT_SECOND_FIELD,
00770         MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00771         DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00772         DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00773         DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00774         WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00775         WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00776         AM_PM_FIELD = UDAT_AM_PM_FIELD,
00777         HOUR1_FIELD = UDAT_HOUR1_FIELD,
00778         HOUR0_FIELD = UDAT_HOUR0_FIELD,
00779         TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00780     };
00781 #endif  /* U_HIDE_OBSOLETE_API */
00782 };
00783 
00784 inline UnicodeString&
00785 DateFormat::format(const Formattable& obj,
00786                    UnicodeString& appendTo,
00787                    UErrorCode& status) const {
00788     return Format::format(obj, appendTo, status);
00789 }
00790 U_NAMESPACE_END
00791 
00792 #endif /* #if !UCONFIG_NO_FORMATTING */
00793 
00794 #endif // _DATEFMT
00795 //eof

Generated on 25 Nov 2014 for ICU 50.1.2 by  doxygen 1.4.7