00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef GREGOCAL_H
00025 #define GREGOCAL_H
00026
00027 #include "unicode/utypes.h"
00028
00029 #if !UCONFIG_NO_FORMATTING
00030
00031 #include "unicode/calendar.h"
00032
00038 U_NAMESPACE_BEGIN
00039
00149 class U_I18N_API GregorianCalendar: public Calendar {
00150 public:
00151
00156 enum EEras {
00157 BC,
00158 AD
00159 };
00160
00169 GregorianCalendar(UErrorCode& success);
00170
00181 GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00182
00192 GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00193
00203 GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00204
00216 GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00217
00228 GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00229
00242 GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00243
00258 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00259
00275 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00276
00281 virtual ~GregorianCalendar();
00282
00288 GregorianCalendar(const GregorianCalendar& source);
00289
00295 GregorianCalendar& operator=(const GregorianCalendar& right);
00296
00302 virtual Calendar* clone(void) const;
00303
00313 void setGregorianChange(UDate date, UErrorCode& success);
00314
00323 UDate getGregorianChange(void) const;
00324
00340 UBool isLeapYear(int32_t year) const;
00341
00349 virtual UBool isEquivalentTo(const Calendar& other) const;
00350
00362 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00363
00375 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00376
00377 #ifndef U_HIDE_DEPRECATED_API
00378
00385 int32_t getActualMinimum(EDateFields field) const;
00386
00395 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00396 #endif
00397
00406 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00407
00408 #ifndef U_HIDE_DEPRECATED_API
00409
00418 int32_t getActualMaximum(EDateFields field) const;
00419 #endif
00420
00431 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00432
00442 virtual UBool inDaylightTime(UErrorCode& status) const;
00443
00444 public:
00445
00456 virtual UClassID getDynamicClassID(void) const;
00457
00469 static UClassID U_EXPORT2 getStaticClassID(void);
00470
00471
00482 virtual const char * getType() const;
00483
00484 private:
00485 GregorianCalendar();
00486
00487 protected:
00494 virtual int32_t internalGetEra() const;
00495
00509 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00510 UBool useMonth) const;
00511
00520 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
00521
00529 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00530
00538 virtual int32_t handleGetYearLength(int32_t eyear) const;
00539
00546 virtual int32_t monthLength(int32_t month) const;
00547
00555 virtual int32_t monthLength(int32_t month, int32_t year) const;
00556
00557 #ifndef U_HIDE_INTERNAL_API
00558
00564 int32_t yearLength(int32_t year) const;
00565
00571 int32_t yearLength(void) const;
00572
00580 void pinDayOfMonth(void);
00581 #endif
00582
00590 virtual UDate getEpochDay(UErrorCode& status);
00591
00613 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00614
00623 virtual int32_t handleGetExtendedYear();
00624
00633 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00634
00635
00651 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00652
00653 private:
00661 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00662 UBool& isLeap);
00663
00668 UBool validateFields(void) const;
00669
00673 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00674
00684 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00685
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 private:
00779 static UDate fgSystemDefaultCenturyStart;
00780
00784 static int32_t fgSystemDefaultCenturyStartYear;
00785
00789 static const int32_t fgSystemDefaultCenturyYear;
00790
00794 static const UDate fgSystemDefaultCentury;
00795
00802 UDate internalGetDefaultCenturyStart(void) const;
00803
00810 int32_t internalGetDefaultCenturyStartYear(void) const;
00811
00816 static void initializeSystemDefaultCentury(void);
00817
00818 };
00819
00820 U_NAMESPACE_END
00821
00822 #endif
00823
00824 #endif // _GREGOCAL
00825
00826