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 U_SHOW_CPLUSPLUS_API
00032
00033 #if !UCONFIG_NO_FORMATTING
00034
00035 #include "unicode/calendar.h"
00036
00042 U_NAMESPACE_BEGIN
00043
00153 class U_I18N_API GregorianCalendar: public Calendar {
00154 public:
00155
00160 enum EEras {
00161 BC,
00162 AD
00163 };
00164
00173 GregorianCalendar(UErrorCode& success);
00174
00185 GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00186
00196 GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00197
00207 GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00208
00220 GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00221
00232 GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00233
00246 GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00247
00262 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00263
00279 GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00280
00285 virtual ~GregorianCalendar();
00286
00292 GregorianCalendar(const GregorianCalendar& source);
00293
00299 GregorianCalendar& operator=(const GregorianCalendar& right);
00300
00306 virtual GregorianCalendar* clone() const;
00307
00317 void setGregorianChange(UDate date, UErrorCode& success);
00318
00327 UDate getGregorianChange(void) const;
00328
00344 UBool isLeapYear(int32_t year) const;
00345
00353 virtual UBool isEquivalentTo(const Calendar& other) const;
00354
00355 #ifndef U_FORCE_HIDE_DEPRECATED_API
00356
00367 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00368 #endif // U_FORCE_HIDE_DEPRECATED_API
00369
00381 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00382
00383 #ifndef U_HIDE_DEPRECATED_API
00384
00391 int32_t getActualMinimum(EDateFields field) const;
00392
00401 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00402 #endif
00403
00412 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00413
00414 #ifndef U_HIDE_DEPRECATED_API
00415
00424 int32_t getActualMaximum(EDateFields field) const;
00425 #endif
00426
00437 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00438
00448 virtual UBool inDaylightTime(UErrorCode& status) const;
00449
00450 public:
00451
00462 virtual UClassID getDynamicClassID(void) const;
00463
00475 static UClassID U_EXPORT2 getStaticClassID(void);
00476
00487 virtual const char * getType() const;
00488
00489 private:
00490 GregorianCalendar();
00491
00492 protected:
00499 virtual int32_t internalGetEra() const;
00500
00514 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00515 UBool useMonth) const;
00516
00525 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
00526
00534 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00535
00543 virtual int32_t handleGetYearLength(int32_t eyear) const;
00544
00551 virtual int32_t monthLength(int32_t month) const;
00552
00560 virtual int32_t monthLength(int32_t month, int32_t year) const;
00561
00562 #ifndef U_HIDE_INTERNAL_API
00563
00569 int32_t yearLength(int32_t year) const;
00570
00576 int32_t yearLength(void) const;
00577
00585 void pinDayOfMonth(void);
00586 #endif
00587
00595 virtual UDate getEpochDay(UErrorCode& status);
00596
00618 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00619
00628 virtual int32_t handleGetExtendedYear();
00629
00638 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00639
00640
00656 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00657
00658 private:
00666 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00667 UBool& isLeap);
00668
00673 UBool validateFields(void) const;
00674
00678 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00679
00689 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00690
00698 UDate fGregorianCutover;
00699
00703 int32_t fCutoverJulianDay;
00704
00710 UDate fNormalizedGregorianCutover;
00711
00716 int32_t fGregorianCutoverYear;
00717
00722 int32_t fGregorianCutoverJulianDay;
00723
00731 static double millisToJulianDay(UDate millis);
00732
00740 static UDate julianDayToMillis(double julian);
00741
00746 UBool fIsGregorian;
00747
00753 UBool fInvertGregorian;
00754
00755
00756 public:
00757
00762 virtual UBool haveDefaultCentury() const;
00763
00768 virtual UDate defaultCenturyStart() const;
00769
00774 virtual int32_t defaultCenturyStartYear() const;
00775 };
00776
00777 U_NAMESPACE_END
00778
00779 #endif
00780
00781 #endif
00782
00783 #endif // _GREGOCAL
00784
00785