Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

datefmt.h

00001 /*
00002 ********************************************************************************
00003 *   Copyright (C) 1997-2001, 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 #include "unicode/calendar.h"
00024 #include "unicode/numfmt.h"
00025 #include "unicode/format.h"
00026 #include "unicode/locid.h"
00027 
00028 U_NAMESPACE_BEGIN
00029 
00030 class TimeZone;
00031 
00124 class U_I18N_API DateFormat : public Format {
00125 public:
00136     enum EField
00137     {
00138         kEraField = 0,      // ERA field alignment.
00139         kYearField,         // YEAR field alignment.
00140         kMonthField,        // MONTH field alignment.
00141         kDateField,         // DATE field alignment.
00142         kHourOfDay1Field,     // One-based HOUR_OF_DAY field alignment.
00143                             // kHourOfDay1Field is used for the one-based 24-hour clock.
00144                             // For example, 23:59 + 01:00 results in 24:59.
00145         kHourOfDay0Field,     // Zero-based HOUR_OF_DAY field alignment.
00146                             // HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
00147                             // For example, 23:59 + 01:00 results in 00:59.
00148         kMinuteField,       // MINUTE field alignment.
00149         kSecondField,       // SECOND field alignment.
00150         kMillisecondField,  // MILLISECOND field alignment.
00151         kDayOfWeekField,      // DAY_OF_WEEK field alignment.
00152         kDayOfYearField,      // DAY_OF_YEAR field alignment.
00153         kDayOfWeekInMonthField,// DAY_OF_WEEK_IN_MONTH field alignment.
00154         kWeekOfYearField,     // WEEK_OF_YEAR field alignment.
00155         kWeekOfMonthField,    // WEEK_OF_MONTH field alignment.
00156         kAmPmField,            // AM_PM field alignment.
00157         kHour1Field,        // One-based HOUR field alignment.
00158                             // HOUR1_FIELD is used for the one-based 12-hour clock.
00159                             // For example, 11:30 PM + 1 hour results in 12:30 AM.
00160         kHour0Field,        // Zero-based HOUR field alignment.
00161                             // HOUR0_FIELD is used for the zero-based 12-hour clock.
00162                             // For example, 11:30 PM + 1 hour results in 00:30 AM.
00163         kTimezoneField,      // TIMEZONE field alignment.
00164         kYearWOYField,   // Corrected year for week representation
00165         kDOWLocalField, // localized day of week
00166 
00167         
00168         
00173         ERA_FIELD                     = kEraField,
00174         YEAR_FIELD                     = kYearField,
00175         MONTH_FIELD                 = kMonthField,
00176         DATE_FIELD                     = kDateField,
00177         HOUR_OF_DAY1_FIELD             = kHourOfDay1Field,
00178         HOUR_OF_DAY0_FIELD             = kHourOfDay0Field,
00179         MINUTE_FIELD                 = kMinuteField,
00180         SECOND_FIELD                 = kSecondField,
00181         MILLISECOND_FIELD             = kMillisecondField,
00182         DAY_OF_WEEK_FIELD             = kDayOfWeekField,
00183         DAY_OF_YEAR_FIELD             = kDayOfYearField,
00184         DAY_OF_WEEK_IN_MONTH_FIELD     = kDayOfWeekInMonthField,
00185         WEEK_OF_YEAR_FIELD             = kWeekOfYearField,
00186         WEEK_OF_MONTH_FIELD         = kWeekOfMonthField,
00187         AM_PM_FIELD                 = kAmPmField,
00188         HOUR1_FIELD                 = kHour1Field,
00189         HOUR0_FIELD                 = kHour0Field,
00190         TIMEZONE_FIELD                 = kTimezoneField
00191 
00192     };
00193 
00200     enum EStyle
00201     {
00202         kNone   = -1,
00203 
00204         kFull   = 0,
00205         kLong   = 1,
00206         kMedium = 2,
00207         kShort  = 3,
00208 
00209         kDateOffset   = kShort + 1,
00210      // kFull   + kDateOffset = 4
00211      // kLong   + kDateOffset = 5
00212      // kMedium + kDateOffset = 6
00213      // kShort  + kDateOffset = 7
00214 
00215         kDateTime             = 8,
00216 
00217         kDefault      = kMedium,
00218 
00219         
00220         
00225         FULL        = kFull,
00226         LONG        = kLong,
00227         MEDIUM        = kMedium,
00228         SHORT        = kShort,
00229         DEFAULT        = kDefault,
00230         DATE_OFFSET    = kDateOffset,
00231         NONE        = kNone,
00232         DATE_TIME    = kDateTime
00233     };
00234 
00239     virtual ~DateFormat();
00240 
00245     virtual UBool operator==(const Format&) const;
00246 
00262     virtual UnicodeString& format(const Formattable& obj,
00263                                   UnicodeString& toAppendTo,
00264                                   FieldPosition& pos,
00265                                   UErrorCode& status) const;
00266 
00296     virtual UnicodeString& format(  Calendar& cal,
00297                                     UnicodeString& toAppendTo,
00298                                     FieldPosition& fieldPosition) const = 0;
00299 
00327     UnicodeString& format(  UDate date,
00328                             UnicodeString& toAppendTo,
00329                             FieldPosition& fieldPosition) const;
00330 
00341     UnicodeString& format(UDate date, UnicodeString& result) const;
00342 
00347     UnicodeString& format(const Formattable& obj,
00348                           UnicodeString& result,
00349                           UErrorCode& status) const;
00350 
00361     virtual UDate parse( const UnicodeString& text,
00362                         UErrorCode& status) const;
00363 
00383     virtual void parse( const UnicodeString& text,
00384                         Calendar& cal,
00385                         ParsePosition& pos) const = 0;
00386 
00406     UDate parse( const UnicodeString& text,
00407                  ParsePosition& pos) const;
00408 
00435     virtual void parseObject(const UnicodeString& source,
00436                              Formattable& result,
00437                              ParsePosition& parse_pos) const;
00438 
00446     static DateFormat* createInstance(void);
00447 
00458     static DateFormat* createTimeInstance(EStyle style = kDefault,
00459                                           const Locale& aLocale = Locale::getDefault());
00460 
00471     static DateFormat* createDateInstance(EStyle style = kDefault,
00472                                           const Locale& aLocale = Locale::getDefault());
00473 
00486     static DateFormat* createDateTimeInstance(EStyle dateStyle = kDefault,
00487                                               EStyle timeStyle = kDefault,
00488                                               const Locale& aLocale = Locale::getDefault());
00489 
00497     static const Locale* getAvailableLocales(int32_t& count);
00498   
00503     virtual UBool isLenient(void) const;
00504 
00513     virtual void setLenient(UBool lenient);
00514     
00520     virtual const Calendar* getCalendar(void) const;
00521     
00528     virtual void adoptCalendar(Calendar* calendarToAdopt);
00529 
00535     virtual void setCalendar(const Calendar& newCalendar);
00536 
00537    
00544     virtual const NumberFormat* getNumberFormat(void) const;
00545     
00552     virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
00553 
00559     virtual void setNumberFormat(const NumberFormat& newNumberFormat);
00560 
00566     virtual const TimeZone& getTimeZone(void) const;
00567     
00574     virtual void adoptTimeZone(TimeZone* zoneToAdopt);
00575 
00581     virtual void setTimeZone(const TimeZone& zone);
00582 
00583     
00584 protected:
00591     DateFormat();
00592 
00597     DateFormat(const DateFormat&);
00598 
00603     DateFormat& operator=(const DateFormat&);
00604 
00610     Calendar* fCalendar;
00611 
00617     NumberFormat* fNumberFormat;
00618 
00619 private:
00628     static DateFormat* create(EStyle timeStyle, EStyle dateStyle, const Locale&);
00629 };
00630 
00631 inline UnicodeString&
00632 DateFormat::format(const Formattable& obj,
00633                    UnicodeString& result,
00634                    UErrorCode& status) const {
00635     return Format::format(obj, result, status);
00636 }
00637 U_NAMESPACE_END
00638 
00639 #endif // _DATEFMT
00640 //eof

Generated on Mon Mar 4 23:12:28 2002 for ICU 2.0 by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002