ICU 4.8.1.1
4.8.1.1
|
00001 /* 00002 * Copyright (C) 1997-2011, 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 00384 int32_t getActualMinimum(EDateFields field) const; 00385 00394 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const; 00395 00404 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const; 00405 00415 int32_t getActualMaximum(EDateFields field) const; 00416 00427 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const; 00428 00438 virtual UBool inDaylightTime(UErrorCode& status) const; 00439 00440 public: 00441 00452 virtual UClassID getDynamicClassID(void) const; 00453 00465 static UClassID U_EXPORT2 getStaticClassID(void); 00466 00473 virtual const char * getType() const; 00474 00475 private: 00476 GregorianCalendar(); // default constructor not implemented 00477 00478 protected: 00485 virtual int32_t internalGetEra() const; 00486 00500 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, 00501 UBool useMonth) const; 00502 00511 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ; 00512 00520 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; 00521 00529 virtual int32_t handleGetYearLength(int32_t eyear) const; 00530 00537 virtual int32_t monthLength(int32_t month) const; 00538 00546 virtual int32_t monthLength(int32_t month, int32_t year) const; 00547 00554 int32_t yearLength(int32_t year) const; 00555 00561 int32_t yearLength(void) const; 00562 00570 void pinDayOfMonth(void); 00571 00579 virtual UDate getEpochDay(UErrorCode& status); 00580 00602 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 00603 00612 virtual int32_t handleGetExtendedYear(); 00613 00622 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy); 00623 00624 00640 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 00641 00642 private: 00650 static double computeJulianDayOfYear(UBool isGregorian, int32_t year, 00651 UBool& isLeap); 00652 00657 UBool validateFields(void) const; 00658 00662 UBool boundsCheck(int32_t value, UCalendarDateFields field) const; 00663 00673 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b); 00674 00683 UDate fGregorianCutover; 00684 00688 int32_t fCutoverJulianDay; 00689 00695 UDate fNormalizedGregorianCutover;// = gregorianCutover; 00696 00701 int32_t fGregorianCutoverYear;// = 1582; 00702 00707 int32_t fGregorianCutoverJulianDay;// = 2299161; 00708 00716 static double millisToJulianDay(UDate millis); 00717 00725 static UDate julianDayToMillis(double julian); 00726 00731 UBool fIsGregorian; 00732 00738 UBool fInvertGregorian; 00739 00740 00741 public: // internal implementation 00742 00747 virtual UBool haveDefaultCentury() const; 00748 00753 virtual UDate defaultCenturyStart() const; 00754 00759 virtual int32_t defaultCenturyStartYear() const; 00760 00761 private: 00768 static UDate fgSystemDefaultCenturyStart; 00769 00773 static int32_t fgSystemDefaultCenturyStartYear; 00774 00778 static const int32_t fgSystemDefaultCenturyYear; 00779 00783 static const UDate fgSystemDefaultCentury; 00784 00791 UDate internalGetDefaultCenturyStart(void) const; 00792 00799 int32_t internalGetDefaultCenturyStartYear(void) const; 00800 00805 static void initializeSystemDefaultCentury(void); 00806 00807 }; 00808 00809 U_NAMESPACE_END 00810 00811 #endif /* #if !UCONFIG_NO_FORMATTING */ 00812 00813 #endif // _GREGOCAL 00814 //eof 00815