00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
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,
00153 YEAR,
00154 MONTH,
00155 WEEK_OF_YEAR,
00156 WEEK_OF_MONTH,
00157 DATE,
00158 DAY_OF_YEAR,
00159 DAY_OF_WEEK,
00160 DAY_OF_WEEK_IN_MONTH,
00161 AM_PM,
00162 HOUR,
00163 HOUR_OF_DAY,
00164 MINUTE,
00165 SECOND,
00166 MILLISECOND,
00167 ZONE_OFFSET,
00168 DST_OFFSET,
00169
00170 YEAR_WOY,
00171 DOW_LOCAL,
00172 FIELD_COUNT,
00173
00174 DAY_OF_MONTH = DATE
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
01025 int32_t fNextStamp;
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
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