ICU 49.1.1
49.1.1
|
00001 /* 00002 * Copyright (C) 1997-2012, International Business Machines Corporation and others. 00003 * All Rights Reserved. 00004 ******************************************************************************** 00005 * 00006 * File GREGOCAL.H 00007 * 00008 * Modification History: 00009 * 00010 * Date Name Description 00011 * 04/22/97 aliu Overhauled header. 00012 * 07/28/98 stephen Sync with JDK 1.2 00013 * 09/04/98 stephen Re-sync with JDK 8/31 putback 00014 * 09/14/98 stephen Changed type of kOneDay, kOneWeek to double. 00015 * Fixed bug in roll() 00016 * 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation. 00017 * Added documentation of WEEK_OF_YEAR computation. 00018 * 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD. 00019 * {JDK bug 4210209 4209272} 00020 * 11/07/2003 srl Update, clean up documentation. 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 /* U_HIDE_DEPRECATED_API */ 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 /* U_HIDE_DEPRECATED_API */ 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 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */ 00482 virtual const char * getType() const; 00483 00484 private: 00485 GregorianCalendar(); // default constructor not implemented 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 /* U_HIDE_INTERNAL_API */ 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;// = gregorianCutover; 00707 00712 int32_t fGregorianCutoverYear;// = 1582; 00713 00718 int32_t fGregorianCutoverJulianDay;// = 2299161; 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: // internal implementation 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 /* #if !UCONFIG_NO_FORMATTING */ 00823 00824 #endif // _GREGOCAL 00825 //eof 00826