Main Page | Class Hierarchy | Alphabetical List | Data Structures | 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 Wed Jul 28 05:45:12 2004 for ICU 2.1 by doxygen 1.3.7