gregocal.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) {1997-2005}, 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 
00037 U_NAMESPACE_BEGIN
00038 
00148 class U_I18N_API GregorianCalendar: public Calendar {
00149 public:
00150 
00155     enum EEras {
00156         BC,
00157         AD
00158     };
00159 
00168     GregorianCalendar(UErrorCode& success);
00169 
00180     GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
00181 
00191     GregorianCalendar(const TimeZone& zone, UErrorCode& success);
00192 
00202     GregorianCalendar(const Locale& aLocale, UErrorCode& success);
00203 
00215     GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
00216 
00227     GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
00228 
00241     GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
00242 
00257     GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
00258 
00274     GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
00275 
00280     virtual ~GregorianCalendar();
00281 
00287     GregorianCalendar(const GregorianCalendar& source);
00288 
00294     GregorianCalendar& operator=(const GregorianCalendar& right);
00295 
00301     virtual Calendar* clone(void) const;
00302 
00312     void setGregorianChange(UDate date, UErrorCode& success);
00313 
00322     UDate getGregorianChange(void) const;
00323 
00339     UBool isLeapYear(int32_t year) const;
00340 
00348     virtual UBool isEquivalentTo(const Calendar& other) const;
00349 
00361     virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
00362 
00374     virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
00375 
00383     int32_t getActualMinimum(EDateFields field) const;
00384 
00393     int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
00394 
00403     int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
00404 
00414     int32_t getActualMaximum(EDateFields field) const;
00415 
00426     virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
00427 
00437     virtual UBool inDaylightTime(UErrorCode& status) const;
00438 
00439 public:
00440 
00451     virtual UClassID getDynamicClassID(void) const;
00452 
00464     static UClassID U_EXPORT2 getStaticClassID(void);
00465 
00472     virtual const char * getType() const;
00473 
00474 protected:
00475 
00482  private:
00483     GregorianCalendar(); // default constructor not implemented
00484 
00485  protected:
00492     virtual int32_t internalGetEra() const;
00493 
00507     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
00508                                                    UBool useMonth) const;
00509 
00518     virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField)  ;
00519 
00527     virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
00528 
00536     virtual int32_t handleGetYearLength(int32_t eyear) const;
00537 
00544     virtual int32_t monthLength(int32_t month) const;
00545 
00553     virtual int32_t monthLength(int32_t month, int32_t year) const;
00554     
00561     int32_t yearLength(int32_t year) const;
00562     
00568     int32_t yearLength(void) const;
00569 
00577     void pinDayOfMonth(void);
00578 
00586     virtual UDate getEpochDay(UErrorCode& status);
00587 
00609     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
00610 
00619     virtual int32_t handleGetExtendedYear();
00620 
00629     virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
00630 
00631 
00647     virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
00648 
00649  private:
00657     static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
00658                                          UBool& isLeap);
00659     
00664     UBool validateFields(void) const;
00665 
00669     UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
00670 
00680     int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
00681 
00690     UDate                fGregorianCutover;
00691 
00695     int32_t             fCutoverJulianDay;
00696 
00702     UDate                 fNormalizedGregorianCutover;// = gregorianCutover;
00703 
00708     int32_t fGregorianCutoverYear;// = 1582;
00709 
00714     int32_t fGregorianCutoverJulianDay;// = 2299161;
00715 
00723     static double millisToJulianDay(UDate millis);
00724 
00732     static UDate julianDayToMillis(double julian);
00733 
00738     UBool fIsGregorian;
00739 
00745     UBool fInvertGregorian;
00746 
00747 
00748  public: // internal implementation
00749 
00754     virtual UBool haveDefaultCentury() const;
00755 
00760     virtual UDate defaultCenturyStart() const;
00761 
00766     virtual int32_t defaultCenturyStartYear() const;
00767 
00768  private:
00775     static UDate         fgSystemDefaultCenturyStart;
00776 
00780     static int32_t          fgSystemDefaultCenturyStartYear;
00781 
00785     static const int32_t    fgSystemDefaultCenturyYear;
00786 
00790     static const UDate        fgSystemDefaultCentury;
00791 
00798     UDate         internalGetDefaultCenturyStart(void) const;
00799 
00806     int32_t          internalGetDefaultCenturyStartYear(void) const;
00807 
00812     static void  initializeSystemDefaultCentury(void);
00813 
00814 };
00815 
00816 U_NAMESPACE_END
00817 
00818 #endif /* #if !UCONFIG_NO_FORMATTING */
00819 
00820 #endif // _GREGOCAL
00821 //eof
00822 

Generated on Sat Feb 11 17:42:28 2006 for ICU 3.4 by  doxygen 1.4.6