Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

gregocal.h

00001 /* 00002 * Copyright (C) {1997-2003}, International Business Machines Corporation and others. All Rights Reserved. 00003 ******************************************************************************** 00004 * 00005 * File GREGOCAL.H 00006 * 00007 * Modification History: 00008 * 00009 * Date Name Description 00010 * 04/22/97 aliu Overhauled header. 00011 * 07/28/98 stephen Sync with JDK 1.2 00012 * 09/04/98 stephen Re-sync with JDK 8/31 putback 00013 * 09/14/98 stephen Changed type of kOneDay, kOneWeek to double. 00014 * Fixed bug in roll() 00015 * 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation. 00016 * Added documentation of WEEK_OF_YEAR computation. 00017 * 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD. 00018 * {JDK bug 4210209 4209272} 00019 * 11/07/2003 srl Update, clean up documentation. 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 00387 int32_t getActualMinimum(UCalendarDateFields field) const; 00388 00398 int32_t getActualMaximum(EDateFields field) const; 00399 00409 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const; 00410 00420 virtual UBool inDaylightTime(UErrorCode& status) const; 00421 00422 public: 00423 00434 virtual UClassID getDynamicClassID(void) const; 00435 00447 static UClassID getStaticClassID(void); 00448 00455 virtual const char * getType() const; 00456 00457 protected: 00458 00465 private: 00466 GregorianCalendar(); // default constructor not implemented 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; 00492 00501 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ; 00502 00510 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; 00511 00519 virtual int32_t handleGetYearLength(int32_t eyear) const; 00520 00527 virtual int32_t monthLength(int32_t month) const; 00528 00536 virtual int32_t monthLength(int32_t month, int32_t year) const; 00537 00544 int32_t yearLength(int32_t year) const; 00545 00551 int32_t yearLength(void) const; 00552 00560 void pinDayOfMonth(void); 00561 00569 virtual UDate getEpochDay(UErrorCode& status); 00570 00592 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 00593 00602 virtual int32_t handleGetExtendedYear(); 00603 00611 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy); 00612 00613 00629 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 00630 00631 private: 00639 static double computeJulianDayOfYear(UBool isGregorian, int32_t year, 00640 UBool& isLeap); 00641 00646 UBool validateFields(void) const; 00647 00651 UBool boundsCheck(int32_t value, UCalendarDateFields field) const; 00652 00662 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b); 00663 00672 UDate fGregorianCutover; 00673 00677 int32_t fCutoverJulianDay; 00678 00684 UDate fNormalizedGregorianCutover;// = gregorianCutover; 00685 00690 int32_t fGregorianCutoverYear;// = 1582; 00691 00696 int32_t fGregorianCutoverJulianDay;// = 2299161; 00697 00705 static double millisToJulianDay(UDate millis); 00706 00714 static UDate julianDayToMillis(double julian); 00715 00720 UBool fIsGregorian; 00721 00727 UBool fInvertGregorian; 00728 00729 00730 public: // internal implementation 00731 00736 virtual UBool haveDefaultCentury() const; 00737 00742 virtual UDate defaultCenturyStart() const; 00743 00748 virtual int32_t defaultCenturyStartYear() const; 00749 00750 private: 00757 static UDate fgSystemDefaultCenturyStart; 00758 00762 static int32_t fgSystemDefaultCenturyStartYear; 00763 00767 static const int32_t fgSystemDefaultCenturyYear; 00768 00772 static const UDate fgSystemDefaultCentury; 00773 00780 UDate internalGetDefaultCenturyStart(void) const; 00781 00788 int32_t internalGetDefaultCenturyStartYear(void) const; 00789 00794 static void initializeSystemDefaultCentury(void); 00795 00796 }; 00797 00798 U_NAMESPACE_END 00799 00800 #endif /* #if !UCONFIG_NO_FORMATTING */ 00801 00802 #endif // _GREGOCAL 00803 //eof 00804

Generated on Wed Jul 28 09:15:54 2004 for ICU 2.8 by doxygen 1.3.7