00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef GREGOCAL_H
00024 #define GREGOCAL_H
00025
00026 #include "unicode/utypes.h"
00027
00028 #if !UCONFIG_NO_FORMATTING
00029
00030 #include "unicode/calendar.h"
00031
00037 U_NAMESPACE_BEGIN
00038
00148 class U_I18N_API GregorianCalendar: public Calendar {
00149 public:
00150
00155 enum EEras {
00156 BC,
00157 AD
00158 };
00159
00168 GregorianCalendar(UErrorCode& success);
00169
00180 GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00181
00191 GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00192
00202 GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00203
00215 GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00216
00227 GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00228
00241 GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00242
00257 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00258
00274 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00275
00280 virtual ~GregorianCalendar();
00281
00287 GregorianCalendar(const GregorianCalendar& source);
00288
00294 GregorianCalendar& operator=(const GregorianCalendar& right);
00295
00301 virtual Calendar* clone(void) const;
00302
00312 void setGregorianChange(UDate date, UErrorCode& success);
00313
00322 UDate getGregorianChange(void) const;
00323
00339 UBool isLeapYear(int32_t year) const;
00340
00348 virtual UBool isEquivalentTo(const Calendar& other) const;
00349
00361 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00362
00374 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00375
00383 int32_t getActualMinimum(EDateFields field) const;
00384
00393 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00394
00403 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00404
00414 int32_t getActualMaximum(EDateFields field) const;
00415
00426 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00427
00437 virtual UBool inDaylightTime(UErrorCode& status) const;
00438
00439 public:
00440
00451 virtual UClassID getDynamicClassID(void) const;
00452
00464 static UClassID U_EXPORT2 getStaticClassID(void);
00465
00472 virtual const char * getType() const;
00473
00474 protected:
00475
00482 private:
00483 GregorianCalendar();
00484
00485 protected:
00492 virtual int32_t internalGetEra() const;
00493
00507 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00508 UBool useMonth) const;
00509
00518 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
00519
00527 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00528
00536 virtual int32_t handleGetYearLength(int32_t eyear) const;
00537
00544 virtual int32_t monthLength(int32_t month) const;
00545
00553 virtual int32_t monthLength(int32_t month, int32_t year) const;
00554
00561 int32_t yearLength(int32_t year) const;
00562
00568 int32_t yearLength(void) const;
00569
00577 void pinDayOfMonth(void);
00578
00586 virtual UDate getEpochDay(UErrorCode& status);
00587
00609 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00610
00619 virtual int32_t handleGetExtendedYear();
00620
00629 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00630
00631
00647 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00648
00649 private:
00657 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00658 UBool& isLeap);
00659
00664 UBool validateFields(void) const;
00665
00669 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00670
00680 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00681
00690 UDate fGregorianCutover;
00691
00695 int32_t fCutoverJulianDay;
00696
00702 UDate fNormalizedGregorianCutover;
00703
00708 int32_t fGregorianCutoverYear;
00709
00714 int32_t fGregorianCutoverJulianDay;
00715
00723 static double millisToJulianDay(UDate millis);
00724
00732 static UDate julianDayToMillis(double julian);
00733
00738 UBool fIsGregorian;
00739
00745 UBool fInvertGregorian;
00746
00747
00748 public:
00749
00754 virtual UBool haveDefaultCentury() const;
00755
00760 virtual UDate defaultCenturyStart() const;
00761
00766 virtual int32_t defaultCenturyStartYear() const;
00767
00768 private:
00775 static UDate fgSystemDefaultCenturyStart;
00776
00780 static int32_t fgSystemDefaultCenturyStartYear;
00781
00785 static const int32_t fgSystemDefaultCenturyYear;
00786
00790 static const UDate fgSystemDefaultCentury;
00791
00798 UDate internalGetDefaultCenturyStart(void) const;
00799
00806 int32_t internalGetDefaultCenturyStartYear(void) const;
00807
00812 static void initializeSystemDefaultCentury(void);
00813
00814 };
00815
00816 U_NAMESPACE_END
00817
00818 #endif
00819
00820 #endif // _GREGOCAL
00821
00822