gregocal.h

Go to the documentation of this file.
00001 /* 00002 * Copyright (C) {1997-2004}, 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 00388 int32_t getActualMinimum(EDateFields field, UErrorCode& status) const; 00389 00398 int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const; 00399 00409 int32_t getActualMaximum(EDateFields field) const; 00410 00421 virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const; 00422 00432 virtual UBool inDaylightTime(UErrorCode& status) const; 00433 00434 public: 00435 00446 virtual UClassID getDynamicClassID(void) const; 00447 00459 static UClassID getStaticClassID(void); 00460 00467 virtual const char * getType() const; 00468 00469 protected: 00470 00477 private: 00478 GregorianCalendar(); // default constructor not implemented 00479 00480 protected: 00487 virtual int32_t internalGetEra() const; 00488 00502 virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, 00503 UBool useMonth) const; 00504 00513 virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ; 00514 00522 virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; 00523 00531 virtual int32_t handleGetYearLength(int32_t eyear) const; 00532 00539 virtual int32_t monthLength(int32_t month) const; 00540 00548 virtual int32_t monthLength(int32_t month, int32_t year) const; 00549 00556 int32_t yearLength(int32_t year) const; 00557 00563 int32_t yearLength(void) const; 00564 00572 void pinDayOfMonth(void); 00573 00581 virtual UDate getEpochDay(UErrorCode& status); 00582 00604 virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; 00605 00614 virtual int32_t handleGetExtendedYear(); 00615 00624 virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy); 00625 00626 00642 virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); 00643 00644 private: 00652 static double computeJulianDayOfYear(UBool isGregorian, int32_t year, 00653 UBool& isLeap); 00654 00659 UBool validateFields(void) const; 00660 00664 UBool boundsCheck(int32_t value, UCalendarDateFields field) const; 00665 00675 int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b); 00676 00685 UDate fGregorianCutover; 00686 00690 int32_t fCutoverJulianDay; 00691 00697 UDate fNormalizedGregorianCutover;// = gregorianCutover; 00698 00703 int32_t fGregorianCutoverYear;// = 1582; 00704 00709 int32_t fGregorianCutoverJulianDay;// = 2299161; 00710 00718 static double millisToJulianDay(UDate millis); 00719 00727 static UDate julianDayToMillis(double julian); 00728 00733 UBool fIsGregorian; 00734 00740 UBool fInvertGregorian; 00741 00742 00743 public: // internal implementation 00744 00749 virtual UBool haveDefaultCentury() const; 00750 00755 virtual UDate defaultCenturyStart() const; 00756 00761 virtual int32_t defaultCenturyStartYear() const; 00762 00763 private: 00770 static UDate fgSystemDefaultCenturyStart; 00771 00775 static int32_t fgSystemDefaultCenturyStartYear; 00776 00780 static const int32_t fgSystemDefaultCenturyYear; 00781 00785 static const UDate fgSystemDefaultCentury; 00786 00793 UDate internalGetDefaultCenturyStart(void) const; 00794 00801 int32_t internalGetDefaultCenturyStartYear(void) const; 00802 00807 static void initializeSystemDefaultCentury(void); 00808 00809 }; 00810 00811 U_NAMESPACE_END 00812 00813 #endif /* #if !UCONFIG_NO_FORMATTING */ 00814 00815 #endif // _GREGOCAL 00816 //eof 00817

Generated on Fri Jun 18 12:35:57 2004 for ICU by doxygen 1.3.7