datefmt.h

Go to the documentation of this file.
00001 /*
00002 ********************************************************************************
00003 *   Copyright (C) 1997-2005, 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 
00137 class U_I18N_API DateFormat : public Format {
00138 public:
00139 
00147     enum EStyle
00148     {
00149         kNone   = -1,
00150 
00151         kFull   = 0,
00152         kLong   = 1,
00153         kMedium = 2,
00154         kShort  = 3,
00155 
00156         kDateOffset   = kShort + 1,
00157      // kFull   + kDateOffset = 4
00158      // kLong   + kDateOffset = 5
00159      // kMedium + kDateOffset = 6
00160      // kShort  + kDateOffset = 7
00161 
00162         kDateTime             = 8,
00163 
00164         kDefault      = kMedium,
00165 
00166 
00167 
00172         FULL        = kFull,
00173         LONG        = kLong,
00174         MEDIUM        = kMedium,
00175         SHORT        = kShort,
00176         DEFAULT        = kDefault,
00177         DATE_OFFSET    = kDateOffset,
00178         NONE        = kNone,
00179         DATE_TIME    = kDateTime
00180     };
00181 
00186     virtual ~DateFormat();
00187 
00192     virtual UBool operator==(const Format&) const;
00193 
00208     virtual UnicodeString& format(const Formattable& obj,
00209                                   UnicodeString& appendTo,
00210                                   FieldPosition& pos,
00211                                   UErrorCode& status) const;
00212 
00242     virtual UnicodeString& format(  Calendar& cal,
00243                                     UnicodeString& appendTo,
00244                                     FieldPosition& fieldPosition) const = 0;
00245 
00273     UnicodeString& format(  UDate date,
00274                             UnicodeString& appendTo,
00275                             FieldPosition& fieldPosition) const;
00276 
00288     UnicodeString& format(UDate date, UnicodeString& appendTo) const;
00289 
00300     UnicodeString& format(const Formattable& obj,
00301                           UnicodeString& appendTo,
00302                           UErrorCode& status) const;
00303 
00314     virtual UDate parse( const UnicodeString& text,
00315                         UErrorCode& status) const;
00316 
00338     virtual void parse( const UnicodeString& text,
00339                         Calendar& cal,
00340                         ParsePosition& pos) const = 0;
00341 
00361     UDate parse( const UnicodeString& text,
00362                  ParsePosition& pos) const;
00363 
00390     virtual void parseObject(const UnicodeString& source,
00391                              Formattable& result,
00392                              ParsePosition& parse_pos) const;
00393 
00401     static DateFormat* U_EXPORT2 createInstance(void);
00402 
00413     static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
00414                                           const Locale& aLocale = Locale::getDefault());
00415 
00426     static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
00427                                           const Locale& aLocale = Locale::getDefault());
00428 
00441     static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
00442                                               EStyle timeStyle = kDefault,
00443                                               const Locale& aLocale = Locale::getDefault());
00444 
00452     static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
00453 
00458     virtual UBool isLenient(void) const;
00459 
00470     virtual void setLenient(UBool lenient);
00471 
00477     virtual const Calendar* getCalendar(void) const;
00478 
00488     virtual void adoptCalendar(Calendar* calendarToAdopt);
00489 
00497     virtual void setCalendar(const Calendar& newCalendar);
00498 
00499 
00506     virtual const NumberFormat* getNumberFormat(void) const;
00507 
00514     virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00515 
00521     virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00522 
00528     virtual const TimeZone& getTimeZone(void) const;
00529 
00536     virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00537 
00543     virtual void setTimeZone(const TimeZone& zone);
00544 
00545 protected:
00552     DateFormat();
00553 
00558     DateFormat(const DateFormat&);
00559 
00564     DateFormat& operator=(const DateFormat&);
00565 
00572     Calendar* fCalendar;
00573 
00580     NumberFormat* fNumberFormat;
00581 
00582 private:
00591     static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00592 
00593 public:
00599     enum EField
00600     {
00601         // Obsolete; use UDateFormatField instead
00602         kEraField = UDAT_ERA_FIELD,
00603         kYearField = UDAT_YEAR_FIELD,
00604         kMonthField = UDAT_MONTH_FIELD,
00605         kDateField = UDAT_DATE_FIELD,
00606         kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
00607         kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
00608         kMinuteField = UDAT_MINUTE_FIELD,
00609         kSecondField = UDAT_SECOND_FIELD,
00610         kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
00611         kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
00612         kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
00613         kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00614         kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
00615         kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
00616         kAmPmField = UDAT_AM_PM_FIELD,
00617         kHour1Field = UDAT_HOUR1_FIELD,
00618         kHour0Field = UDAT_HOUR0_FIELD,
00619         kTimezoneField = UDAT_TIMEZONE_FIELD,
00620         kYearWOYField = UDAT_YEAR_WOY_FIELD,
00621         kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
00622         kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
00623         kJulianDayField = UDAT_JULIAN_DAY_FIELD,
00624         kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
00625 
00626         // Obsolete; use UDateFormatField instead
00627         ERA_FIELD = UDAT_ERA_FIELD,
00628         YEAR_FIELD = UDAT_YEAR_FIELD,
00629         MONTH_FIELD = UDAT_MONTH_FIELD,
00630         DATE_FIELD = UDAT_DATE_FIELD,
00631         HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
00632         HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
00633         MINUTE_FIELD = UDAT_MINUTE_FIELD,
00634         SECOND_FIELD = UDAT_SECOND_FIELD,
00635         MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
00636         DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
00637         DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
00638         DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
00639         WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
00640         WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
00641         AM_PM_FIELD = UDAT_AM_PM_FIELD,
00642         HOUR1_FIELD = UDAT_HOUR1_FIELD,
00643         HOUR0_FIELD = UDAT_HOUR0_FIELD,
00644         TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
00645     };
00646 };
00647 
00648 inline UnicodeString&
00649 DateFormat::format(const Formattable& obj,
00650                    UnicodeString& appendTo,
00651                    UErrorCode& status) const {
00652     return Format::format(obj, appendTo, status);
00653 }
00654 U_NAMESPACE_END
00655 
00656 #endif /* #if !UCONFIG_NO_FORMATTING */
00657 
00658 #endif // _DATEFMT
00659 //eof

Generated on Mon Aug 13 07:17:24 2007 for ICU 3.6 by  doxygen 1.5.2