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 override;
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 override;
00354
00355 #ifndef U_FORCE_HIDE_DEPRECATED_API
00356
00367 virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) override;
00368 #endif // U_FORCE_HIDE_DEPRECATED_API
00369
00381 virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) override;
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 override;
00413
00424 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const override;
00425
00426 public:
00427
00438 virtual UClassID getDynamicClassID(void) const override;
00439
00451 static UClassID U_EXPORT2 getStaticClassID(void);
00452
00463 virtual const char * getType() const override;
00464
00465 private:
00466 GregorianCalendar() = delete;
00467
00468 protected:
00475 virtual int32_t internalGetEra() const;
00476
00490 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00491 UBool useMonth) const override;
00492
00501 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) override;
00502
00510 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
00511
00519 virtual int32_t handleGetYearLength(int32_t eyear) const override;
00520
00527 virtual int32_t monthLength(int32_t month) const;
00528
00536 virtual int32_t monthLength(int32_t month, int32_t year) const;
00537
00538 #ifndef U_HIDE_INTERNAL_API
00539
00545 int32_t yearLength(int32_t year) const;
00546
00552 int32_t yearLength(void) const;
00553
00561 void pinDayOfMonth(void);
00562 #endif
00563
00571 virtual UDate getEpochDay(UErrorCode& status);
00572
00594 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
00595
00604 virtual int32_t handleGetExtendedYear() override;
00605
00614 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy) override;
00615
00616
00632 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
00633
00634 private:
00642 static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00643 UBool& isLeap);
00644
00649 UBool validateFields(void) const;
00650
00654 UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00655
00665 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00666
00674 UDate fGregorianCutover;
00675
00679 int32_t fCutoverJulianDay;
00680
00686 UDate fNormalizedGregorianCutover;
00687
00692 int32_t fGregorianCutoverYear;
00693
00701 static double millisToJulianDay(UDate millis);
00702
00710 static UDate julianDayToMillis(double julian);
00711
00716 UBool fIsGregorian;
00717
00723 UBool fInvertGregorian;
00724
00725
00726 public:
00727
00732 virtual UBool haveDefaultCentury() const override;
00733
00738 virtual UDate defaultCenturyStart() const override;
00739
00744 virtual int32_t defaultCenturyStartYear() const override;
00745 };
00746
00747 U_NAMESPACE_END
00748
00749 #endif
00750
00751 #endif
00752
00753 #endif // _GREGOCAL
00754
00755