Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

calendar.h

Go to the documentation of this file.
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/utypes.h"
00027 #include "unicode/uobject.h"
00028 #include "unicode/locid.h"
00029 #include "unicode/timezone.h"
00030 
00031 U_NAMESPACE_BEGIN
00032 
00144 class U_I18N_API Calendar : public UObject {
00145 public:
00146 
00153     enum EDateFields {
00154         ERA,                  // Example: 0..1
00155         YEAR,                 // Example: 1..big number
00156         MONTH,                // Example: 0..11
00157         WEEK_OF_YEAR,         // Example: 1..53
00158         WEEK_OF_MONTH,        // Example: 1..4
00159         DATE,                 // Example: 1..31
00160         DAY_OF_YEAR,          // Example: 1..365
00161         DAY_OF_WEEK,          // Example: 1..7
00162         DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1
00163         AM_PM,                // Example: 0..1
00164         HOUR,                 // Example: 0..11
00165         HOUR_OF_DAY,          // Example: 0..23
00166         MINUTE,               // Example: 0..59
00167         SECOND,               // Example: 0..59
00168         MILLISECOND,          // Example: 0..999
00169         ZONE_OFFSET,          // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR
00170         DST_OFFSET,           // Example: 0 or U_MILLIS_PER_HOUR
00171 // here will go names for 'Y' and 'e'
00172         YEAR_WOY,  // 'Y' Example: 1..big number
00173         DOW_LOCAL, // 'e' Example: 1..7
00174         FIELD_COUNT,
00175 
00176         DAY_OF_MONTH = DATE   // Synonyms
00177     };
00178 
00185     enum EDaysOfWeek {
00186         SUNDAY = 1,
00187         MONDAY,
00188         TUESDAY,
00189         WEDNESDAY,
00190         THURSDAY,
00191         FRIDAY,
00192         SATURDAY
00193     };
00194 
00199     enum EMonths {
00200         JANUARY,
00201         FEBRUARY,
00202         MARCH,
00203         APRIL,
00204         MAY,
00205         JUNE,
00206         JULY,
00207         AUGUST,
00208         SEPTEMBER,
00209         OCTOBER,
00210         NOVEMBER,
00211         DECEMBER,
00212         UNDECIMBER
00213     };
00214 
00219     enum EAmpm {
00220         AM,
00221         PM
00222     };
00223 
00228     virtual ~Calendar();
00229 
00236     virtual Calendar* clone(void) const = 0;
00237 
00248     static Calendar* createInstance(UErrorCode& success);
00249 
00262     static Calendar* createInstance(TimeZone* zoneToAdopt, UErrorCode& success);
00263 
00275     static Calendar* createInstance(const TimeZone& zone, UErrorCode& success);
00276 
00287     static Calendar* createInstance(const Locale& aLocale, UErrorCode& success);
00288 
00302     static Calendar* createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00303 
00316     static Calendar* createInstance(const TimeZone& zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00317 
00327     static const Locale* getAvailableLocales(int32_t& count);
00328 
00336     static UDate getNow(void);
00337 
00351     inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); }
00352 
00363     inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); }
00364 
00376     virtual UBool operator==(const Calendar& that) const;
00377 
00386     UBool operator!=(const Calendar& that) const {return !operator==(that);}
00387 
00402     UBool equals(const Calendar& when, UErrorCode& status) const;
00403 
00417     UBool before(const Calendar& when, UErrorCode& status) const;
00418 
00432     UBool after(const Calendar& when, UErrorCode& status) 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 
00557     virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status);
00558 
00567     void adoptTimeZone(TimeZone* value);
00568 
00576     void setTimeZone(const TimeZone& zone);
00577 
00586     const TimeZone& getTimeZone(void) const;
00587 
00596     TimeZone* orphanTimeZone(void);
00597 
00606     virtual UBool inDaylightTime(UErrorCode& status) const = 0;
00607 
00620     void setLenient(UBool lenient);
00621 
00628     UBool isLenient(void) const;
00629 
00636     void setFirstDayOfWeek(EDaysOfWeek value);
00637 
00644     EDaysOfWeek getFirstDayOfWeek(void) const;
00645 
00655     void setMinimalDaysInFirstWeek(uint8_t value);
00656 
00666     uint8_t getMinimalDaysInFirstWeek(void) const;
00667 
00676     virtual int32_t getMinimum(EDateFields field) const = 0;
00677 
00686     virtual int32_t getMaximum(EDateFields field) const = 0;
00687 
00696     virtual int32_t getGreatestMinimum(EDateFields field) const = 0;
00697 
00706     virtual int32_t getLeastMaximum(EDateFields field) const = 0;
00707 
00722     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00723 
00740     int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;
00741 
00755     int32_t get(EDateFields field, UErrorCode& status) const;
00756 
00765     UBool isSet(EDateFields field) const;
00766 
00774     void set(EDateFields field, int32_t value);
00775 
00786     void set(int32_t year, int32_t month, int32_t date);
00787 
00800     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);
00801 
00815     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);
00816 
00823     void clear(void);
00824 
00833     void clear(EDateFields field);
00834 
00850     virtual UClassID getDynamicClassID(void) const = 0;
00851 
00852 protected:
00853 
00862     Calendar(UErrorCode& success);
00863 
00870     Calendar(const Calendar& source);
00871 
00878     Calendar& operator=(const Calendar& right);
00879 
00890     Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);
00891 
00901     Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00902 
00911     virtual void computeTime(UErrorCode& status) = 0;
00912 
00924     virtual void computeFields(UErrorCode& status) = 0;
00925 
00935     double getTimeInMillis(UErrorCode& status) const;
00936 
00945     void setTimeInMillis( double millis, UErrorCode& status );
00946 
00956     void complete(UErrorCode& status);
00957 
00966     int32_t internalGet(EDateFields field) const {return fFields[field];}
00967 
00977     void internalSet(EDateFields field, int32_t value);
00978 
00979 protected:
00984     UBool      fIsTimeSet;
00985 
00996     UBool      fAreFieldsSet;
00997 
01003     UBool      fAreAllFieldsSet;
01004 
01011     UDate        internalGetTime(void) const     { return fTime; }
01012 
01020     void        internalSetTime(UDate time)     { fTime = time; }
01021 
01026     int32_t     fFields[FIELD_COUNT];
01027 
01032     UBool      fIsSet[FIELD_COUNT];
01033 
01037     enum {
01038         kUnset                 = 0,
01039         kInternallySet,
01040         kMinimumUserStamp
01041     };
01042 
01049     int32_t        fStamp[FIELD_COUNT];
01050 
01051 private:
01052 
01053     // The next available value for stampp[]
01054     int32_t fNextStamp;// = MINIMUM_USER_STAMP;
01055 
01059     UDate        fTime;
01060 
01064     UBool      fLenient;
01065 
01070     TimeZone*   fZone;
01071 
01080     EDaysOfWeek fFirstDayOfWeek;
01081     uint8_t     fMinimalDaysInFirstWeek;
01082 
01092     void        setWeekCountData(const Locale& desiredLocale, UErrorCode& success);
01093 
01103     void updateTime(UErrorCode& status);
01104 
01108     static const char kDateTimeElements[];
01109 };
01110 
01111 // -------------------------------------
01112 
01113 inline Calendar*
01114 Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)
01115 {
01116     // since the Locale isn't specified, use the default locale
01117     return createInstance(zone, Locale::getDefault(), errorCode);
01118 }
01119 
01120 // -------------------------------------
01121 
01122 inline void 
01123 Calendar::roll(EDateFields field, UBool up, UErrorCode& status)
01124 {
01125     roll(field, (int32_t)(up ? +1 : -1), status);
01126 }
01127 
01128 // -------------------------------------
01129 
01134 inline void
01135 Calendar::internalSet(EDateFields field, int32_t value)
01136 {
01137     fFields[field] = value;
01138 }
01139 
01140 U_NAMESPACE_END
01141 
01142 #endif // _CALENDAR

Generated on Thu Aug 15 14:13:23 2002 for ICU 2.2 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001