Main Page   Class Hierarchy   Compound List   File List   Header Files   Sources   Compound Members   File Members  

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 
00030 
00141 class U_I18N_API Calendar {
00142 public:
00143 
00149     enum EDateFields {
00150         ERA,                  // Example: 0..1
00151         YEAR,                 // Example: 1..big number
00152         MONTH,                // Example: 0..11
00153         WEEK_OF_YEAR,         // Example: 1..53
00154         WEEK_OF_MONTH,        // Example: 1..4
00155         DATE,                 // Example: 1..31
00156         DAY_OF_YEAR,          // Example: 1..365
00157         DAY_OF_WEEK,          // Example: 1..7
00158         DAY_OF_WEEK_IN_MONTH, // Example: 1..4, may be specified as -1
00159         AM_PM,                // Example: 0..1
00160         HOUR,                 // Example: 0..11
00161         HOUR_OF_DAY,          // Example: 0..23
00162         MINUTE,               // Example: 0..59
00163         SECOND,               // Example: 0..59
00164         MILLISECOND,          // Example: 0..999
00165         ZONE_OFFSET,          // Example: -12*U_MILLIS_PER_HOUR..12*U_MILLIS_PER_HOUR
00166         DST_OFFSET,           // Example: 0 or U_MILLIS_PER_HOUR
00167 // here will go names for 'Y' and 'e'
00168         YEAR_WOY,  // 'Y' Example: 1..big number
00169         DOW_LOCAL, // 'e' Example: 1..7
00170         FIELD_COUNT,
00171 
00172         DAY_OF_MONTH = DATE   // Synonyms
00173     };
00174 
00180     enum EDaysOfWeek {
00181         SUNDAY = 1,
00182         MONDAY,
00183         TUESDAY,
00184         WEDNESDAY,
00185         THURSDAY,
00186         FRIDAY,
00187         SATURDAY
00188     };
00189 
00193     enum EMonths {
00194         JANUARY,
00195         FEBRUARY,
00196         MARCH,
00197         APRIL,
00198         MAY,
00199         JUNE,
00200         JULY,
00201         AUGUST,
00202         SEPTEMBER,
00203         OCTOBER,
00204         NOVEMBER,
00205         DECEMBER,
00206         UNDECIMBER
00207     };
00208 
00212     enum EAmpm {
00213         AM,
00214         PM
00215     };
00216 
00221     virtual ~Calendar();
00222 
00227     virtual Calendar* clone(void) const = 0;
00228 
00239     static Calendar* createInstance(UErrorCode& success);
00240 
00253     static Calendar* createInstance(TimeZone* zoneToAdopt, UErrorCode& success);
00254 
00266     static Calendar* createInstance(const TimeZone& zone, UErrorCode& success);
00267 
00278     static Calendar* createInstance(const Locale& aLocale, UErrorCode& success);
00279 
00293     static Calendar* createInstance(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00294 
00307     static Calendar* createInstance(const TimeZone& zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00308 
00318     static const Locale* getAvailableLocales(int32_t& count);
00319 
00327     static UDate getNow(void);
00328 
00342     inline UDate getTime(UErrorCode& status) const { return getTimeInMillis(status); }
00343 
00351     inline void setTime(UDate date, UErrorCode& status) { setTimeInMillis(date, status); }
00352 
00364     virtual UBool operator==(const Calendar& that) const;
00365 
00374     UBool operator!=(const Calendar& that) const {return !operator==(that);}
00375 
00390     UBool equals(const Calendar& when, UErrorCode& status) const;
00391 
00405     UBool before(const Calendar& when, UErrorCode& status) const;
00406 
00420     UBool after(const Calendar& when, UErrorCode& status) const;
00421 
00427     virtual UBool equivalentTo(const Calendar& other) const;
00428 
00446     virtual void add(EDateFields field, int32_t amount, UErrorCode& status) = 0;
00447 
00471     void roll(EDateFields field, UBool up, UErrorCode& status);
00472 
00495     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) = 0;
00496 
00505     void adoptTimeZone(TimeZone* value);
00506 
00514     void setTimeZone(const TimeZone& zone);
00515 
00524     const TimeZone& getTimeZone(void) const;
00525 
00534     TimeZone* orphanTimeZone(void);
00535 
00544     virtual UBool inDaylightTime(UErrorCode& status) const = 0;
00545 
00558     void setLenient(UBool lenient);
00559 
00566     UBool isLenient(void) const;
00567 
00574     void setFirstDayOfWeek(EDaysOfWeek value);
00575 
00582     EDaysOfWeek getFirstDayOfWeek(void) const;
00583 
00593     void setMinimalDaysInFirstWeek(uint8_t value);
00594 
00604     uint8_t getMinimalDaysInFirstWeek(void) const;
00605 
00614     virtual int32_t getMinimum(EDateFields field) const = 0;
00615 
00624     virtual int32_t getMaximum(EDateFields field) const = 0;
00625 
00634     virtual int32_t getGreatestMinimum(EDateFields field) const = 0;
00635 
00644     virtual int32_t getLeastMaximum(EDateFields field) const = 0;
00645 
00659     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00660 
00676     int32_t getActualMaximum(EDateFields field, UErrorCode& status) const;
00677 
00691     int32_t get(EDateFields field, UErrorCode& status) const;
00692 
00700     UBool isSet(EDateFields field) const;
00701 
00709     void set(EDateFields field, int32_t value);
00710 
00721     void set(int32_t year, int32_t month, int32_t date);
00722 
00735     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute);
00736 
00750     void set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second);
00751 
00758     void clear(void);
00759 
00768     void clear(EDateFields field);
00769 
00785     virtual UClassID getDynamicClassID(void) const = 0;
00786 
00787 protected:
00788 
00797     Calendar(UErrorCode& success);
00798 
00803     Calendar(const Calendar& source);
00804 
00809     Calendar& operator=(const Calendar& right);
00810 
00821     Calendar(TimeZone* zone, const Locale& aLocale, UErrorCode& success);
00822 
00832     Calendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00833 
00842     virtual void computeTime(UErrorCode& status) = 0;
00843 
00851     virtual void computeFields(UErrorCode& status) = 0;
00852 
00858     double getTimeInMillis(UErrorCode& status) const;
00859 
00865     void setTimeInMillis( double millis, UErrorCode& status );
00866 
00876     void complete(UErrorCode& status);
00877 
00886     int32_t internalGet(EDateFields field) const {return fFields[field];}
00887 
00894     void internalSet(EDateFields field, int32_t value);
00895 
00896 protected:
00900     UBool      fIsTimeSet;
00901 
00911     UBool      fAreFieldsSet;
00912 
00917     UBool      fAreAllFieldsSet;
00918 
00923     UDate        internalGetTime(void) const     { return fTime; }
00924 
00929     void        internalSetTime(UDate time)     { fTime = time; }
00930 
00934     int32_t     fFields[FIELD_COUNT];
00935 
00939     UBool      fIsSet[FIELD_COUNT];
00940 
00941     // Special values of stamp[]
00942     enum {
00943         kUnset                 = 0,
00944         kInternallySet,
00945         kMinimumUserStamp
00946     };
00947 
00953     int32_t        fStamp[FIELD_COUNT];
00954 
00955 private:
00956 
00957     // The next available value for stampp[]
00958     int32_t fNextStamp;// = MINIMUM_USER_STAMP;
00959 
00963     UDate        fTime;
00964 
00968     UBool      fLenient;
00969 
00974     TimeZone*   fZone;
00975 
00984     EDaysOfWeek fFirstDayOfWeek;
00985     uint8_t     fMinimalDaysInFirstWeek;
00986 
00996     void        setWeekCountData(const Locale& desiredLocale, UErrorCode& success);
00997 
01003     void updateTime(UErrorCode& status);
01004 
01011     static int32_t  stringToDayNumber(const UnicodeString& string, UErrorCode& status);
01012 
01016     static const char* kDateTimeElements;
01017 };
01018 
01019 // -------------------------------------
01020 
01021 inline Calendar*
01022 Calendar::createInstance(TimeZone* zone, UErrorCode& errorCode)
01023 {
01024     // since the Locale isn't specified, use the default locale
01025     return createInstance(zone, Locale::getDefault(), errorCode);
01026 }
01027 
01028 // -------------------------------------
01029 
01030 inline void 
01031 Calendar::roll(EDateFields field, UBool up, UErrorCode& status)
01032 {
01033     roll(field, (int32_t)(up ? +1 : -1), status);
01034 }
01035 
01036 // -------------------------------------
01037 
01042 inline void
01043 Calendar::internalSet(EDateFields field, int32_t value)
01044 {
01045     fFields[field] = value;
01046 }
01047 
01048 #endif // _CALENDAR

Generated at Mon Jun 5 12:53:01 2000 for ICU1.5 by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999