00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef GREGOCAL_H
00027 #define GREGOCAL_H
00028
00029 #include "unicode/utypes.h"
00030
00031 #if !UCONFIG_NO_FORMATTING
00032
00033 #include "unicode/calendar.h"
00034
00040 U_NAMESPACE_BEGIN
00041
00151 class U_I18N_API GregorianCalendar: public Calendar {
00152 public:
00153
00158 enum EEras {
00159 BC,
00160 AD
00161 };
00162
00171 GregorianCalendar(UErrorCode& success);
00172
00183 GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00184
00194 GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00195
00205 GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00206
00218 GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00219
00230 GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00231
00244 GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00245
00260 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00261
00277 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00278
00283 virtual ~GregorianCalendar();
00284
00290 GregorianCalendar(const GregorianCalendar& source);
00291
00297 GregorianCalendar& operator=(const GregorianCalendar& right);
00298
00304 virtual Calendar* clone(void) const;
00305
00315 void setGregorianChange(UDate date, UErrorCode& success);
00316
00325 UDate getGregorianChange(void) const;
00326
00342 UBool isLeapYear(int32_t year) const;
00343
00351 virtual UBool isEquivalentTo(const Calendar& other) const;
00352
00364 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00365
00377 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00378
00379 #ifndef U_HIDE_DEPRECATED_API
00380
00387 int32_t getActualMinimum(EDateFields field) const;
00388
00397 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00398 #endif
00399
00408 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00409
00410 #ifndef U_HIDE_DEPRECATED_API
00411
00420 int32_t getActualMaximum(EDateFields field) const;
00421 #endif
00422
00433 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00434
00444 virtual UBool inDaylightTime(UErrorCode& status) const;
00445
00446 public:
00447
00458 virtual UClassID getDynamicClassID(void) const;
00459
00471 static UClassID U_EXPORT2 getStaticClassID(void);
00472
00483 virtual const char * getType() const;
00484
00485 private:
00486 GregorianCalendar();
00487
00488 protected:
00495 virtual int32_t internalGetEra() const;
00496
00510 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00511 UBool useMonth) const;
00512
00521 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
00522
00530 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00531
00539 virtual int32_t handleGetYearLength(int32_t eyear) const;
00540
00547 virtual int32_t monthLength(int32_t month) const;
00548
00556 virtual int32_t monthLength(int32_t month, int32_t year) const;
00557
00558 #ifndef U_HIDE_INTERNAL_API
00559
00565 int32_t yearLength(int32_t year) const;
00566
00572 int32_t yearLength(void) const;
00573
00581 void pinDayOfMonth(void);
00582 #endif
00583
00591 virtual UDate getEpochDay(UErrorCode& status);
00592
00614 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00615
00624 virtual int32_t handleGetExtendedYear();
00625
00634 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00635
00636
00652 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00653
00654 private:
00662 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00663 UBool& isLeap);
00664
00669 UBool validateFields(void) const;
00670
00674 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00675
00685 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00686
00694 UDate fGregorianCutover;
00695
00699 int32_t fCutoverJulianDay;
00700
00706 UDate fNormalizedGregorianCutover;
00707
00712 int32_t fGregorianCutoverYear;
00713
00718 int32_t fGregorianCutoverJulianDay;
00719
00727 static double millisToJulianDay(UDate millis);
00728
00736 static UDate julianDayToMillis(double julian);
00737
00742 UBool fIsGregorian;
00743
00749 UBool fInvertGregorian;
00750
00751
00752 public:
00753
00758 virtual UBool haveDefaultCentury() const;
00759
00764 virtual UDate defaultCenturyStart() const;
00765
00770 virtual int32_t defaultCenturyStartYear() const;
00771 };
00772
00773 U_NAMESPACE_END
00774
00775 #endif
00776
00777 #endif // _GREGOCAL
00778
00779