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-2002, 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 *    8/19/2002  srl         Removed Javaisms
00021 ********************************************************************************
00022 */
00023 
00024 #ifndef CALENDAR_H
00025 #define CALENDAR_H
00026 
00027 #include "unicode/utypes.h"
00028 
00029 #if !UCONFIG_NO_FORMATTING
00030 
00031 #include "unicode/uobject.h"
00032 #include "unicode/locid.h"
00033 #include "unicode/timezone.h"
00034 
00035 U_NAMESPACE_BEGIN
00036 
00147 class U_I18N_API Calendar : public UObject {
00148 public:
00149 
00156     enum EDateFields {
00157         ERA,                  // Example: 0..1
00158         YEAR,                 // Example: 1..big number
00159         MONTH,                // Example: 0..11
00160         WEEK_OF_YEAR,         // Example: 1..53
00161         WEEK_OF_MONTH,        // Example: 1..4
00162         DATE,                 // Example: 1..31
00163         DAY_OF_YEAR,          // Example: 1..365
00164         DAY_OF_WEEK,          // Example: 1..7
00165         DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1
00166         AM_PM,                // Example: 0..1
00167         HOUR,                 // Example: 0..11
00168         HOUR_OF_DAY,          // Example: 0..23
00169         MINUTE,               // Example: 0..59
00170         SECOND,               // Example: 0..59
00171         MILLISECOND,          // Example: 0..999
00172         ZONE_OFFSET,          // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR
00173         DST_OFFSET,           // Example: 0 or U_MILLIS_PER_HOUR
00174 // here will go names for 'Y' and 'e'
00175         YEAR_WOY,  // 'Y' Example: 1..big number
00176         DOW_LOCAL, // 'e' Example: 1..7
00177         FIELD_COUNT,
00178 
00179         DAY_OF_MONTH = DATE   // Synonyms
00180     };
00181 
00188     enum EDaysOfWeek {
00189         SUNDAY = 1,
00190         MONDAY,
00191         TUESDAY,
00192         WEDNESDAY,
00193         THURSDAY,
00194         FRIDAY,
00195         SATURDAY
00196     };
00197 
00202     enum EMonths {
00203         JANUARY,
00204         FEBRUARY,
00205         MARCH,
00206         APRIL,
00207         MAY,
00208         JUNE,
00209         JULY,
00210         AUGUST,
00211         SEPTEMBER,
00212         OCTOBER,
00213         NOVEMBER,
00214         DECEMBER,
00215         UNDECIMBER
00216     };
00217 
00222     enum EAmpm {
00223         AM,
00224         PM
00225     };
00226 
00231     virtual ~Calendar();
00232 
00239     virtual Calendar* clone(void) const = 0;
00240 
00251     static Calendar* createInstance(UErrorCode& success);
00252 
00265     static Calendar* createInstance(TimeZone* zoneToAdopt, UErrorCode& success);
00266 
00278     static Calendar* createInstance(const TimeZone& zone, UErrorCode& success);
00279 
00290     static Calendar* createInstance(const Locale& aLocale, UErrorCode& success);
00291 
00305     static Calendar* createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00306 
00319     static Calendar* createInstance(const TimeZone& zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00320 
00330     static const Locale* getAvailableLocales(int32_t& count);
00331 
00339     static UDate getNow(void);
00340 
00354     inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); }
00355 
00366     inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); }
00367 
00379     virtual UBool operator==(const Calendar& that) const;
00380 
00389     UBool operator!=(const Calendar& that) const {return !operator==(that);}
00390 
00401     virtual UBool isEquivalentTo(const Calendar& other) const;
00402 
00417     UBool equals(const Calendar& when, UErrorCode& status) const;
00418 
00432     UBool before(const Calendar& when, UErrorCode& status) const;
00433 
00447     UBool after(const Calendar& when, UErrorCode& status) const;
00448 
00466     virtual void add(EDateFields field, int32_t amount, UErrorCode& status) = 0;
00467 
00491     void roll(EDateFields field, UBool up, UErrorCode& status);
00492 
00515     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) = 0;
00516 
00572     virtual int32_t fieldDifference(UDate when, EDateFields field, UErrorCode& status);
00573 
00582     void adoptTimeZone(TimeZone* value);
00583 
00591     void setTimeZone(const TimeZone& zone);
00592 
00601     const TimeZone& getTimeZone(void) const;
00602 
00611     TimeZone* orphanTimeZone(void);
00612 
00621     virtual UBool inDaylightTime(UErrorCode& status) const = 0;
00622 
00635     void setLenient(UBool lenient);
00636 
00643     UBool isLenient(void) const;
00644 
00651     void setFirstDayOfWeek(EDaysOfWeek value);
00652 
00659     EDaysOfWeek getFirstDayOfWeek(void) const;
00660 
00670     void setMinimalDaysInFirstWeek(uint8_t value);
00671 
00681     uint8_t getMinimalDaysInFirstWeek(void) const;
00682 
00691     virtual int32_t getMinimum(EDateFields field) const = 0;
00692 
00701     virtual int32_t getMaximum(EDateFields field) const = 0;
00702 
00711     virtual int32_t getGreatestMinimum(EDateFields field) const = 0;
00712 
00721     virtual int32_t getLeastMaximum(EDateFields field) const = 0;
00722 
00737     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00738 
00755     int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;
00756 
00770     int32_t get(EDateFields field, UErrorCode& status) const;
00771 
00780     UBool isSet(EDateFields field) const;
00781 
00789     void set(EDateFields field, int32_t value);
00790 
00801     void set(int32_t year, int32_t month, int32_t date);
00802 
00815     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);
00816 
00830     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);
00831 
00838     void clear(void);
00839 
00848     void clear(EDateFields field);
00849 
00865     virtual UClassID getDynamicClassID(void) const = 0;
00866 
00867 protected:
00868 
00877     Calendar(UErrorCode& success);
00878 
00885     Calendar(const Calendar& source);
00886 
00893     Calendar& operator=(const Calendar& right);
00894 
00905     Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);
00906 
00916     Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00917 
00926     virtual void computeTime(UErrorCode& status) = 0;
00927 
00939     virtual void computeFields(UErrorCode& status) = 0;
00940 
00950     double getTimeInMillis(UErrorCode& status) const;
00951 
00960     void setTimeInMillis( double millis, UErrorCode& status );
00961 
00971     void complete(UErrorCode& status);
00972 
00981     int32_t internalGet(EDateFields field) const {return fFields[field];}
00982 
00992     void internalSet(EDateFields field, int32_t value);
00993 
00994 protected:
00999     UBool      fIsTimeSet;
01000 
01011     UBool      fAreFieldsSet;
01012 
01018     UBool      fAreAllFieldsSet;
01019 
01026     UDate        internalGetTime(void) const     { return fTime; }
01027 
01035     void        internalSetTime(UDate time)     { fTime = time; }
01036 
01041     int32_t     fFields[FIELD_COUNT];
01042 
01047     UBool      fIsSet[FIELD_COUNT];
01048 
01052     enum {
01053         kUnset                 = 0,
01054         kInternallySet,
01055         kMinimumUserStamp
01056     };
01057 
01064     int32_t        fStamp[FIELD_COUNT];
01065 
01066 private:
01067 
01068     // The next available value for stampp[]
01069     int32_t fNextStamp;// = MINIMUM_USER_STAMP;
01070 
01074     UDate        fTime;
01075 
01079     UBool      fLenient;
01080 
01085     TimeZone*   fZone;
01086 
01095     EDaysOfWeek fFirstDayOfWeek;
01096     uint8_t     fMinimalDaysInFirstWeek;
01097 
01107     void        setWeekCountData(const Locale& desiredLocale, UErrorCode& success);
01108 
01118     void updateTime(UErrorCode& status);
01119 
01123     static const char kDateTimeElements[];
01124 };
01125 
01126 // -------------------------------------
01127 
01128 inline Calendar*
01129 Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)
01130 {
01131     // since the Locale isn't specified, use the default locale
01132     return createInstance(zone, Locale::getDefault(), errorCode);
01133 }
01134 
01135 // -------------------------------------
01136 
01137 inline void 
01138 Calendar::roll(EDateFields field, UBool up, UErrorCode& status)
01139 {
01140     roll(field, (int32_t)(up ? +1 : -1), status);
01141 }
01142 
01143 // -------------------------------------
01144 
01149 inline void
01150 Calendar::internalSet(EDateFields field, int32_t value)
01151 {
01152     fFields[field] = value;
01153 }
01154 
01155 U_NAMESPACE_END
01156 
01157 #endif /* #if !UCONFIG_NO_FORMATTING */
01158 
01159 #endif // _CALENDAR

Generated on Wed Dec 18 16:49:28 2002 for ICU 2.4 by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001