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
00032 U_NAMESPACE_BEGIN
00033
00143 class U_I18N_API GregorianCalendar: public Calendar {
00144 public:
00145
00150 enum EEras {
00151 BC,
00152 AD
00153 };
00154
00163 GregorianCalendar(UErrorCode& success);
00164
00175 GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00176
00186 GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00187
00197 GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00198
00210 GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00211
00222 GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00223
00236 GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00237
00252 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00253
00269 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00270
00275 virtual ~GregorianCalendar();
00276
00282 GregorianCalendar(const GregorianCalendar& source);
00283
00289 GregorianCalendar& operator=(const GregorianCalendar& right);
00290
00296 virtual Calendar* clone(void) const;
00297
00307 void setGregorianChange(UDate date, UErrorCode& success);
00308
00317 UDate getGregorianChange(void) const;
00318
00334 UBool isLeapYear(int32_t year) const;
00335
00343 virtual UBool isEquivalentTo(const Calendar& other) const;
00344
00356 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00357
00369 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00370
00378 int32_t getActualMinimum(EDateFields field) const;
00379
00388 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00389
00398 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00399
00409 int32_t getActualMaximum(EDateFields field) const;
00410
00421 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00422
00432 virtual UBool inDaylightTime(UErrorCode& status) const;
00433
00434 public:
00435
00446 virtual UClassID getDynamicClassID(void) const;
00447
00459 static UClassID U_EXPORT2 getStaticClassID(void);
00460
00467 virtual const char * getType() const;
00468
00469 protected:
00470
00477 private:
00478 GregorianCalendar();
00479
00480 protected:
00487 virtual int32_t internalGetEra() const;
00488
00502 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00503 UBool useMonth) const;
00504
00513 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
00514
00522 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00523
00531 virtual int32_t handleGetYearLength(int32_t eyear) const;
00532
00539 virtual int32_t monthLength(int32_t month) const;
00540
00548 virtual int32_t monthLength(int32_t month, int32_t year) const;
00549
00556 int32_t yearLength(int32_t year) const;
00557
00563 int32_t yearLength(void) const;
00564
00572 void pinDayOfMonth(void);
00573
00581 virtual UDate getEpochDay(UErrorCode& status);
00582
00604 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00605
00614 virtual int32_t handleGetExtendedYear();
00615
00624 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00625
00626
00642 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00643
00644 private:
00652 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00653 UBool& isLeap);
00654
00659 UBool validateFields(void) const;
00660
00664 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00665
00675 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00676
00685 UDate fGregorianCutover;
00686
00690 int32_t fCutoverJulianDay;
00691
00697 UDate fNormalizedGregorianCutover;
00698
00703 int32_t fGregorianCutoverYear;
00704
00709 int32_t fGregorianCutoverJulianDay;
00710
00718 static double millisToJulianDay(UDate millis);
00719
00727 static UDate julianDayToMillis(double julian);
00728
00733 UBool fIsGregorian;
00734
00740 UBool fInvertGregorian;
00741
00742
00743 public:
00744
00749 virtual UBool haveDefaultCentury() const;
00750
00755 virtual UDate defaultCenturyStart() const;
00756
00761 virtual int32_t defaultCenturyStartYear() const;
00762
00763 private:
00770 static UDate fgSystemDefaultCenturyStart;
00771
00775 static int32_t fgSystemDefaultCenturyStartYear;
00776
00780 static const int32_t fgSystemDefaultCenturyYear;
00781
00785 static const UDate fgSystemDefaultCentury;
00786
00793 UDate internalGetDefaultCenturyStart(void) const;
00794
00801 int32_t internalGetDefaultCenturyStartYear(void) const;
00802
00807 static void initializeSystemDefaultCentury(void);
00808
00809 };
00810
00811 U_NAMESPACE_END
00812
00813 #endif
00814
00815 #endif // _GREGOCAL
00816
00817