Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

calendar.h

00001 /*
00002 ********************************************************************************
00003 *   Copyright (C) 1997-1999, International Business Machines
00004 *   Corporation and others.  All Rights Reserved.
00005 ********************************************************************************
00006 *
00007 * File CALENDAR.H
00008 *
00009 * Modification History:
00010 *
00011 *   Date        Name        Description
00012 *   04/22/97    aliu        Expanded and corrected comments and other header
00013 *                           contents.
00014 *   05/01/97    aliu        Made equals(), before(), after() arguments const.
00015 *   05/20/97    aliu        Replaced fAreFieldsSet with fAreFieldsInSync and
00016 *                           fAreAllFieldsSet.
00017 *   07/27/98    stephen     Sync up with JDK 1.2
00018 *   11/15/99    weiv        added YEAR_WOY and DOW_LOCAL
00019 *                           to EDateFields
00020 ********************************************************************************
00021 */
00022 
00023 #ifndef CALENDAR_H
00024 #define CALENDAR_H
00025 
00026 #include "unicode/locid.h"
00027 #include "unicode/timezone.h"
00028 
00029 U_NAMESPACE_BEGIN
00030 
00142 class U_I18N_API Calendar {
00143 public:
00144 
00151     enum EDateFields {
00152         ERA,                  // Example: 0..1
00153         YEAR,                 // Example: 1..big number
00154         MONTH,                // Example: 0..11
00155         WEEK_OF_YEAR,         // Example: 1..53
00156         WEEK_OF_MONTH,        // Example: 1..4
00157         DATE,                 // Example: 1..31
00158         DAY_OF_YEAR,          // Example: 1..365
00159         DAY_OF_WEEK,          // Example: 1..7
00160         DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1
00161         AM_PM,                // Example: 0..1
00162         HOUR,                 // Example: 0..11
00163         HOUR_OF_DAY,          // Example: 0..23
00164         MINUTE,               // Example: 0..59
00165         SECOND,               // Example: 0..59
00166         MILLISECOND,          // Example: 0..999
00167         ZONE_OFFSET,          // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR
00168         DST_OFFSET,           // Example: 0 or U_MILLIS_PER_HOUR
00169 // here will go names for 'Y' and 'e'
00170         YEAR_WOY,  // 'Y' Example: 1..big number
00171         DOW_LOCAL, // 'e' Example: 1..7
00172         FIELD_COUNT,
00173 
00174         DAY_OF_MONTH = DATE   // Synonyms
00175     };
00176 
00183     enum EDaysOfWeek {
00184         SUNDAY = 1,
00185         MONDAY,
00186         TUESDAY,
00187         WEDNESDAY,
00188         THURSDAY,
00189         FRIDAY,
00190         SATURDAY
00191     };
00192 
00197     enum EMonths {
00198         JANUARY,
00199         FEBRUARY,
00200         MARCH,
00201         APRIL,
00202         MAY,
00203         JUNE,
00204         JULY,
00205         AUGUST,
00206         SEPTEMBER,
00207         OCTOBER,
00208         NOVEMBER,
00209         DECEMBER,
00210         UNDECIMBER
00211     };
00212 
00217     enum EAmpm {
00218         AM,
00219         PM
00220     };
00221 
00226     virtual ~Calendar();
00227 
00232     virtual Calendar* clone(void) const = 0;
00233 
00244     static Calendar* createInstance(UErrorCode& success);
00245 
00258     static Calendar* createInstance(TimeZone* zoneToAdopt, UErrorCode& success);
00259 
00271     static Calendar* createInstance(const TimeZone& zone, UErrorCode& success);
00272 
00283     static Calendar* createInstance(const Locale& aLocale, UErrorCode& success);
00284 
00298     static Calendar* createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00299 
00312     static Calendar* createInstance(const TimeZone& zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00313 
00323     static const Locale* getAvailableLocales(int32_t& count);
00324 
00332     static UDate getNow(void);
00333 
00347     inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); }
00348 
00356     inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); }
00357 
00369     virtual UBool operator==(const Calendar& that) const;
00370 
00379     UBool operator!=(const Calendar& that) const {return !operator==(that);}
00380 
00395     UBool equals(const Calendar& when, UErrorCode& status) const;
00396 
00410     UBool before(const Calendar& when, UErrorCode& status) const;
00411 
00425     UBool after(const Calendar& when, UErrorCode& status) const;
00426 
00432     virtual UBool equivalentTo(const Calendar& other) const;
00433 
00451     virtual void add(EDateFields field, int32_t amount, UErrorCode& status) = 0;
00452 
00476     void roll(EDateFields field, UBool up, UErrorCode& status);
00477 
00500     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) = 0;
00501 
00554     virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status);
00555 
00564     void adoptTimeZone(TimeZone* value);
00565 
00573     void setTimeZone(const TimeZone& zone);
00574 
00583     const TimeZone& getTimeZone(void) const;
00584 
00593     TimeZone* orphanTimeZone(void);
00594 
00603     virtual UBool inDaylightTime(UErrorCode& status) const = 0;
00604 
00617     void setLenient(UBool lenient);
00618 
00625     UBool isLenient(void) const;
00626 
00633     void setFirstDayOfWeek(EDaysOfWeek value);
00634 
00641     EDaysOfWeek getFirstDayOfWeek(void) const;
00642 
00652     void setMinimalDaysInFirstWeek(uint8_t value);
00653 
00663     uint8_t getMinimalDaysInFirstWeek(void) const;
00664 
00673     virtual int32_t getMinimum(EDateFields field) const = 0;
00674 
00683     virtual int32_t getMaximum(EDateFields field) const = 0;
00684 
00693     virtual int32_t getGreatestMinimum(EDateFields field) const = 0;
00694 
00703     virtual int32_t getLeastMaximum(EDateFields field) const = 0;
00704 
00718     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00719 
00735     int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;
00736 
00750     int32_t get(EDateFields field, UErrorCode& status) const;
00751 
00759     UBool isSet(EDateFields field) const;
00760 
00768     void set(EDateFields field, int32_t value);
00769 
00780     void set(int32_t year, int32_t month, int32_t date);
00781 
00794     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);
00795 
00809     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);
00810 
00817     void clear(void);
00818 
00827     void clear(EDateFields field);
00828 
00844     virtual UClassID getDynamicClassID(void) const = 0;
00845 
00846 protected:
00847 
00856     Calendar(UErrorCode& success);
00857 
00862     Calendar(const Calendar& source);
00863 
00868     Calendar& operator=(const Calendar& right);
00869 
00880     Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);
00881 
00891     Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00892 
00901     virtual void computeTime(UErrorCode& status) = 0;
00902 
00910     virtual void computeFields(UErrorCode& status) = 0;
00911 
00917     double getTimeInMillis(UErrorCode& status) const;
00918 
00924     void setTimeInMillis( double millis, UErrorCode& status );
00925 
00935     void complete(UErrorCode& status);
00936 
00945     int32_t internalGet(EDateFields field) const {return fFields[field];}
00946 
00953     void internalSet(EDateFields field, int32_t value);
00954 
00955 protected:
00960     UBool      fIsTimeSet;
00961 
00972     UBool      fAreFieldsSet;
00973 
00979     UBool      fAreAllFieldsSet;
00980 
00985     UDate        internalGetTime(void) const     { return fTime; }
00986 
00991     void        internalSetTime(UDate time)     { fTime = time; }
00992 
00997     int32_t     fFields[FIELD_COUNT];
00998 
01003     UBool      fIsSet[FIELD_COUNT];
01004 
01008     enum {
01009         kUnset                 = 0,
01010         kInternallySet,
01011         kMinimumUserStamp
01012     };
01013 
01020     int32_t        fStamp[FIELD_COUNT];
01021 
01022 private:
01023 
01024     // The next available value for stampp[]
01025     int32_t fNextStamp;// = MINIMUM_USER_STAMP;
01026 
01030     UDate        fTime;
01031 
01035     UBool      fLenient;
01036 
01041     TimeZone*   fZone;
01042 
01051     EDaysOfWeek fFirstDayOfWeek;
01052     uint8_t     fMinimalDaysInFirstWeek;
01053 
01063     void        setWeekCountData(const Locale& desiredLocale, UErrorCode& success);
01064 
01070     void updateTime(UErrorCode& status);
01071 
01075     static const char kDateTimeElements[];
01076 };
01077 
01078 // -------------------------------------
01079 
01080 inline Calendar*
01081 Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)
01082 {
01083     // since the Locale isn't specified, use the default locale
01084     return createInstance(zone, Locale::getDefault(), errorCode);
01085 }
01086 
01087 // -------------------------------------
01088 
01089 inline void 
01090 Calendar::roll(EDateFields field, UBool up, UErrorCode& status)
01091 {
01092     roll(field, (int32_t)(up ? +1 : -1), status);
01093 }
01094 
01095 // -------------------------------------
01096 
01101 inline void
01102 Calendar::internalSet(EDateFields field, int32_t value)
01103 {
01104     fFields[field] = value;
01105 }
01106 
01107 U_NAMESPACE_END
01108 
01109 #endif // _CALENDAR

Generated on Mon Jul 25 21:51:36 2005 for ICU 2.1 by  doxygen 1.4.3-20050530